【python爬虫专项(29)】链家二手房源数据采集2(深度信息采集)

链家二手房源数据深度采集

这部分的实践是基于上一个博客获得的数据,具体的参考网址如下:
在这里插入图片描述

爬虫逻辑 :【提取mongo里面的具体网页的链接】–> 【设置动态ip】–> 【获取详细信息】

函数式编程:

函数1:url_extract(database,table,field) → 【数据网页url提取】函数
         database:数据库
         table:源数据mongo集合对象
         field:url字段

函数2:get_data(ui,d_h,ips,table) → 【数据采集及mongo入库】函数
         ui:数据信息网页
         d_h:user-agent信息
         ips:代理设置
         table:mongo集合对象

前期准备并封装第一个函数

上一个博客已经完成了分页中各个列表里面标题所对应的url(链接)采集,这里只需要加载一下即可

  1. 导入相关库、代码分区和配置数据库
import re
import requests
import time
from bs4 import BeautifulSoup
import pymongo

if __name__ == '__main__':
	myclient = pymongo.MongoClient("mongodb://localhost:27017/")
    db = myclient['链家二手房_1']
    datatable = db['data_1']
  1. 数据提取
dlst = datatable.find()
print(dlst)
print(dlst[0])

输出结果为:(dlst是一个可以迭代的对象,这里取出第一个元素示例)
在这里插入图片描述
3) 封装第一个函数

def url_extract(database,table,field): 
    '''【数据网页url提取】函数
    database:数据库
    table:源数据mongo集合对象
    field:url字段
    '''
    dlst = table.find()
    lst = []
    for item in dlst:
        lst.append(item[field])
    return lst
   
urllst = url_extract(db,datatable,'链接')[:10]
print(urllst)

输出结果为:(网页均可以打开)

[‘https://bj.lianjia.com/ershoufang/101106641912.html’, ‘https://bj.lianjia.com/ershoufang/101106120874.html’, ‘https://bj.lianjia.com/ershoufang/101106506136.html’, ‘https://bj.lianjia.com/ershoufang/101106369778.html’, ‘https://bj.lianjia.com/ershoufang/101106678537.html’, ‘https://bj.lianjia.com/ershoufang/101106148748.html’, ‘https://bj.lianjia.com/ershoufang/101106628849.html’, ‘https://bj.lianjia.com/ershoufang/101104451607.html’, ‘https://bj.lianjia.com/ershoufang/101104041998.html’, ‘https://bj.lianjia.com/ershoufang/101106586759.html’]

数据标签定位

由于前一个博文已经测试了网址可以进行正常的数据请求响应,这里就不再进行测试了,以某一页面为例,进行试错,直接确定采集的字段(标题可以直接通h1获取),如下
在这里插入图片描述

  1. 房价信息对应的标签
    在这里插入图片描述
  2. 基础信息对应的标签
    在这里插入图片描述
  3. 交易信息对应的标签
    在这里插入图片描述
  4. 经纬度对应的标签
    这里可以通过网页里面的出现的位置,然后复制到坐标拾取器里面,查看经纬度,然后复制经度的前面的数字,在源代码(不是检查页面)中找到相应的位置
    在这里插入图片描述
    在源代码页面选择查找,输入116(因为上面搜到的只是大致的地址,但是前面的经度是没有问题的),就会出现对应的位置信息
    在这里插入图片描述

获取标签中的内容数据

这里还是以该页面为例,获取里面标签的对应内容,进行试错

urllst = url_extract(db,datatable,'链接')[:10]

u = urllst[0]
r = requests.get(u,headers = dic_headers, cookies = dic_cookies)
soup = BeautifulSoup(r.text, 'lxml')
dic = {}
dic['标题'] = soup.h1.text
price = soup.find('div', class_="price").text
dic['总价_万'] = re.search(r'(\d+)万', price).group(1)
dic['单价_元'] = re.search(r'(\d+)元', price).group(1)

base_info = soup.find('div', class_="base").find('ul').find_all('li')
for li in base_info:
    st = re.split(r'<.*?>',str(li))
    dic[st[2]] = st[3]
    
transaction_info = soup.find('div', class_="transaction").find('ul').find_all('li')
for li in transaction_info:
    st = re.split(r'<.*?>',str(li))
    dic[st[2]] = st[4].replace('\n','').replace(' ','')
    
loc = re.search(r"resblockPosition:'([\d.]+),([\d.]+)'",r.text)
dic['lng'] = loc.group(1)
dic['lat'] = loc.group(2)

print(dic)

输出的结果为:
在这里插入图片描述

封装第二个函数及输出可视化

关于base_info和transaction_info获取的过程有点难度

def get_data(ui,d_h,d_c,ips,table):
    ''' 【数据采集及mongo入库】函数
    ui:数据信息网页
    d_h:user-agent信息
    ips:代理设置
    table:mongo集合对象
    '''
    r = requests.get(ui,headers = d_h, cookies = d_c)
    soup = BeautifulSoup(r.text, 'lxml')
    dic = {}
    dic['标题'] = soup.h1.text
    price = soup.find('div', class_="price").text
    dic['总价_万'] = re.search(r'(\d+)万', price).group(1)
    dic['单价_元'] = re.search(r'(\d+)元', price).group(1)
    
    base_info = soup.find('div', class_="base").find('ul').find_all('li')
    for li in base_info:
        st = re.split(r'<.*?>',str(li))
        dic[st[2]] = st[3]
        
    transaction_info = soup.find('div', class_="transaction").find('ul').find_all('li')
    for li in transaction_info:
        st = re.split(r'<.*?>',str(li))
        dic[st[2]] = st[4].replace('\n','').replace(' ','')
        
    loc = re.search(r"resblockPosition:'([\d.]+),([\d.]+)'",r.text)
    dic['lng'] = loc.group(1)
    dic['lat'] = loc.group(2)
    table.insert_one(dic)

最后的可视化代码如下

urllst = url_extract(db,datatable,'链接')[:100]

errorlst = []
count = 1
for u in urllst:
    print("程序正在休息......")
    time.sleep(5)
    try:
        get_data(u,dic_headers,dic_cookies,'a', datatable2)
        print(f'成功采集{count}条数据')
        count += 1
    except:
        errorlst.append(u)
        print('数据采集失败,网址为:',u)

输出结果:
在这里插入图片描述
数据库中的数据
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
开单大师是款专业的房地产erp软件(采集插件,房源获取更方便)。开单大师页面简洁明了,数据实时更新,一键式操作管理。传输更快、更稳定,支持移动端的数据交互方案,更好提升您的用户体验。社区信息/座栋信息/房屋信息/图片信息实时更新,及时反馈房屋租售状况。全新智能定义房源等级标准,规则统一,标准统一,让资源优选自动化。根据房源等级制定所属房源维护标准,通道内资源维护周期标准化,保证成交。 开单大师特色介绍: 1、技术方案支持大数据量业务场景, 平台集成各类外部应用系统,网站平台帮企业快速搭建动态网站等全面功能。 2、房源管理 支持网络多门店,多人联网系统工作。中介网站无缝集成和微站无缝集成,提升中介门店服务能力,更 3、权限和设置 各种角色和权限设置,不限门店,员工数量。可灵活设置每一位经纪人的权限,认证机器,可限制经纪人只能在门店内电脑登录。 4、全新智能激励辅助运营 根据个人业务动作所占成交比例预知业绩金额,发挥经纪人主观能动性,加速成交进程! 5、移动端应用 特色移动端应用,方便快捷查询管理。实时数据更新,事件准时提示。让你随心掌握,想改就改。 6、微信分享 经纪人可对自己的订单进行评价和分享,也可在微商城、圈子等多频道进行分享。 7、强大的财务报表分析中心 大数据智能分析业 绩数据,了解业绩走势。门店损益状况一目了然,让门店运营状况尽在你的眼中! 8、在线客服 经纪人与客户随时沟通,轻松解决客户疑问,不在受疑难杂症的烦恼 9、三大日志辅助运营 三大日志相辅相成,让一切尽在掌握,为您的数据安全提供优质的保护。 10、定制开发 开单大师为不同的要求,提供最适合的定制化解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lys_828

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值