python爬虫

爬虫

python 复制代码
# python库
# requests 用来获取页面内容
# BeautifulSoup 用来提取页面中的元素

# 1.获取页面中的每一个链接
# 2.进入每个链接获取对应元素

# pip install requests
# pip install bs4
python 复制代码
import time
import pymysql
import requests
from bs4 import BeautifulSoup
python 复制代码
#获取url下的页面内容,返回soup对象
def get_page(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.text,'lxml')#提供一种lxml的解析格式
    return soup

# 封装成函数,作用是获取列表页下面的所有租房页面的链接,返回一个链接列表
def get_links(link_url):
    soup = get_page(link_url)
    links_div = soup.find_all('div',class_ = "content__list--item")
    links = [div.a.get('href') for div in links_div] #使用列表推导式构建一个新的列表
    return links

#shift + M:框向下合并

#获取房屋详细信息
def get_house_info(house_url):
    soup = get_page(house_url)
    div = soup.find('div',class_ = "content__aside--title")
    if div != None:
        price = soup.find('div',class_ = "content__aside--title").span.text#价格
        unit = soup.find('div',class_ = "content__aside--title").text[5:8]#单价
        info_div = soup.find('div',class_ = "content__article__info")
        house_info = info_div.ul.find_all('li', class_ = 'fl oneline')
        area = house_info[1].text[3:]#面积
        direction = house_info[2].text[3:]#朝向
        floor = house_info[7].text[3:]#楼层
        layout_div = soup.find('ul',class_ = "content__aside__list")
        layout_li = layout_div.find_all('li')
        layout = layout_li[2].text[5:].strip() #户型
        info = {
        '价格':price,
        '单价':unit,
        '面积':area,
        '朝向':direction,
        '楼层':floor,
        '户型':layout
        }
        return info
    else:
        return 'None'

def get_db(setting):
    return pymysql.connect(**setting)

def insert(conn, house):
    vaules = "'{}',"*5 + "'{}'"
    sql_values = vaules.format(house['价格'],house['单价'],house['面积'],
                               house['朝向'],house['楼层'],house['户型'])
    sql = """
        insert into house_info(price,unit,area,direction,floor,layout)
        values({});
    """.format(sql_values)
    #打印插入语句
    print(sql)
    #创建游标
    cursor = conn.cursor()
    #执行sql插入
    cursor.execute(sql)
    #提交sql插入语句
    conn.commit()
python 复制代码
values = "'{}',"*5+"'{}'"
svalues = values.format(1,2,3,4,5,6)
svalues
sql = "{}".format(svalues)
sql
python 复制代码
DATABASE = {
    'host':'127.0.0.1',
    'database':'lianjia',
    'user':'root',
    'password':'123qwe'
}
conn = get_db(DATABASE)
links = get_links('https://bj.lianjia.com/zufang/')
for link in links:  
    time.sleep(2)#设置两秒读取一个页面
    link = 'https://bj.lianjia.com' + link
    house = get_house_info(link)
    if house != 'None':
        print('获取一个房子信息成功')
        print('网址为:%s'%(link))
        print(house, end='\r')#\r代表回车符
        insert(conn, house)
        pass
    else:
        print('获取一个房子信息失败')
        pass
        
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1889968478874501120.html
{'价格': '6800', '单价': '元/月', '面积': '83.00㎡', '朝向': '南 北', '楼层': '高楼层/22层', '户型': '南/北 高楼层/22层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('6800','元/月','83.00㎡','南 北','高楼层/22层','南/北 高楼层/22层');
    
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1892882486606692352.html
{'价格': '5500', '单价': '元/月', '面积': '76.00㎡', '朝向': '南 北', '楼层': '低楼层/28层', '户型': '南/北 低楼层/28层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('5500','元/月','76.00㎡','南 北','低楼层/28层','南/北 低楼层/28层');
    
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1776912742876184576.html
{'价格': '5388', '单价': '元/月', '面积': '95.00㎡', '朝向': '南 北', '楼层': '低楼层/24层', '户型': '南/北 低楼层/24层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('5388','元/月','95.00㎡','南 北','低楼层/24层','南/北 低楼层/24层');
    
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1890316563584647168.html
{'价格': '6200', '单价': '元/月', '面积': '63.00㎡', '朝向': '南', '楼层': '高楼层/4层', '户型': '南 高楼层/4层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('6200','元/月','63.00㎡','南','高楼层/4层','南 高楼层/4层');
    
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1734931428581310464.html
{'价格': '4223', '单价': '元/月', '面积': '89.31㎡', '朝向': '南 北', '楼层': '低楼层/7层', '户型': '南/北 低楼层/7层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('4223','元/月','89.31㎡','南 北','低楼层/7层','南/北 低楼层/7层');
    
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1889174856377827328.html
{'价格': '3800', '单价': '元/月', '面积': '95.75㎡', '朝向': '南', '楼层': '低楼层/5层', '户型': '南 低楼层/5层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('3800','元/月','95.75㎡','南','低楼层/5层','南 低楼层/5层');
    
获取一个房子信息失败
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1892484578489139200.html
{'价格': '4100', '单价': '元/月', '面积': '92.00㎡', '朝向': '南 北', '楼层': '中楼层/7层', '户型': '南/北 中楼层/7层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('4100','元/月','92.00㎡','南 北','中楼层/7层','南/北 中楼层/7层');
    
获取一个房子信息失败
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1892808790579871744.html
{'价格': '5000', '单价': '元/月', '面积': '86.51㎡', '朝向': '南 北', '楼层': '中楼层/14层', '户型': '南/北 中楼层/14层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('5000','元/月','86.51㎡','南 北','中楼层/14层','南/北 中楼层/14层');
    
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1773955754940694528.html
{'价格': '4120', '单价': '元/月', '面积': '39.63㎡', '朝向': '南', '楼层': '低楼层/5层', '户型': '南 低楼层/5层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('4120','元/月','39.63㎡','南','低楼层/5层','南 低楼层/5层');
    
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1893328913262706688.html
{'价格': '6000', '单价': '元/月', '面积': '48.90㎡', '朝向': '北', '楼层': '高楼层/21层', '户型': '北 高楼层/21层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('6000','元/月','48.90㎡','北','高楼层/21层','北 高楼层/21层');
    
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1890995106006171648.html
{'价格': '6500', '单价': '元/月', '面积': '75.08㎡', '朝向': '南 北', '楼层': '高楼层/18层', '户型': '南/北 高楼层/18层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('6500','元/月','75.08㎡','南 北','高楼层/18层','南/北 高楼层/18层');
    
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1861392335263236096.html
{'价格': '2850', '单价': '元/月', '面积': '103.54㎡', '朝向': '南 北', '楼层': '低楼层/12层', '户型': '南/北 低楼层/12层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('2850','元/月','103.54㎡','南 北','低楼层/12层','南/北 低楼层/12层');
    
获取一个房子信息失败
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1893939431702790144.html
{'价格': '3550', '单价': '元/月', '面积': '42.42㎡', '朝向': '南', '楼层': '中楼层/5层', '户型': '南 中楼层/5层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('3550','元/月','42.42㎡','南','中楼层/5层','南 中楼层/5层');
    
获取一个房子信息失败
获取一个房子信息失败
相关推荐
985小水博一枚呀32 分钟前
【深度学习基础模型】神经图灵机(Neural Turing Machines, NTM)详细理解并附实现代码。
人工智能·python·rnn·深度学习·lstm·ntm
萧鼎2 小时前
Python调试技巧:高效定位与修复问题
服务器·开发语言·python
IFTICing2 小时前
【文献阅读】Attention Bottlenecks for Multimodal Fusion
人工智能·pytorch·python·神经网络·学习·模态融合
大神薯条老师2 小时前
Python从入门到高手4.3节-掌握跳转控制语句
后端·爬虫·python·深度学习·机器学习·数据分析
程序员爱德华2 小时前
Python环境安装教程
python
huanxiangcoco2 小时前
152. 乘积最大子数组
python·leetcode
萧鼎3 小时前
Python常见问题解答:从基础到进阶
开发语言·python·ajax
PythonFun3 小时前
Python技巧:如何避免数据输入类型错误
前端·python
kaikai_sk3 小时前
搜索引擎相关的一段实习经历
python
qinzechen3 小时前
分享几个做题网站------学习网------工具网;
java·c语言·c++·python·c#