爬取链家网二手房数据,爬虫爬取链家数据

  爬取链家网二手房数据,爬虫爬取链家数据

  【python爬虫专场(29)】链家2二手房数据采集(深度信息采集)_wx62cb940602a10 _博客的技术博客

  链家的二手房数据深度收集的做法,是基于上一篇博客获得的数据。具体参考网站如下:

  爬虫逻辑:[提取mongo中特定网页的链接]-[设置动态IP]-[获取详细信息]函数式编程:

  1: url _ extract(数据库,表格,字段)【数据页面url提取】函数

  数据库:数据库

  表:源数据mongo集合对象

  字段:url字段

  2: get _ data (UI,D _ H,IPS,Table) 【数据采集和mongo入库】函数

  Ui:数据信息网页

  D _ H:用户代理信息

  Ips:代理设置

  表:mongo集合对象

  前期准备和包装第一个函数。前面的博客已经在分页中完成了每个列表中标题对应的URL(链接)的收集,这里只需要加载即可。

  导入相关库、代码分区和配置数据库导入re

  导入请求

  导入时间

  从bs4导入BeautifulSoup

  导入pymongo

  if __name__==__main__ :

  myclient=pymongo。MongoClient( MongoDB://localhost:27017/)

  Db=myclient[链家二手房_1]

  Datatable=db[data_1]数据提取dlst=datatable.find()

  打印(dlst)

  print(dlst[0])的输出结果是:(dlst是一个可以迭代的对象,这里是第一个元素示例)

  3)封装第一个函数

  def url_extract(数据库,表,字段):

  [数据网页的url提取]功能

  数据库:数据库

  表:源数据mongo集合对象

  字段:url字段

  dlst=table.find()

  lst=[]

  对于dlst中的项目:

  lst.append(项目[字段])

  返回lst

  Url lst=URL _ extract (db,datatable, link) [: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”

  数据标签定位:由于之前的博文已经测试过该URL可以响应正常的数据请求,这里就不做测试了。以一个页面为例,进行试错,直接确定收集的字段(标题可以直接通过h1获得),如下

  对应房价信息的标签

  基本信息对应的标签

  对应于交易信息的标签

  对应于纬度和经度的标签

  在这里,通过在网页中复制位置,然后复制到坐标选择器中检查经纬度,再复制经度前面的数字,就可以在源代码(不是检查页)中找到相应的位置。

  在源代码页面选择搜索,输入116(因为上面的搜索只是一个大概的地址,但是前面的经度是没有问题的),就会出现相应的位置信息。

  获取标签中的内容数据。这里以这个页面为例,获取里面标签对应的内容,进行试错。

  Url lst=URL _ extract (db,datatable, link) [:10]

  u=urllst[0]

  r=requests.get(u,headers=dic_headers,cookies=dic _ cookies)

  soup=BeautifulSoup(r.text, lxml )

  dic={}

  Dic[ title]=soup.h1.text

  price=soup.find(div ,class_=price )。文本

  Dic[总价_万]=re.search(r(\d)万,价格)。组(1)

  Dic[单价_元]=re.search(r(\d)元,价格)。组(1)

  base_info=soup.find(div ,class_=base )。查找( ul )。查找全部(李)

  对于base_info中的李:

  st=re.split(r 。*? ,str(李))

  dic[st[2]]=st[3]

  transaction _ info=汤。find( div ,class_=transaction ).查找( ul ).查找全部(李)

  对于交易信息中的李:

  st=re.split(r .*? ,字符串(李))

  dic[st[2]]=st[4].替换( \n , ).替换( ,)

  loc=re。search(r resblockposition:([\d.]),([\ d .]) ,r.text)

  dic[lng]=位置组(1)

  dic[lat]=位置组(2)

  打印(驾驶员信息中心)输出的结果为:

  封装第二个函数及输出可视化关于基本信息和交易信息获取的过程有点难度

  def get_data(ui,d_h,d_c,ips,table):

   【数据采集及蒙戈入库】函数

  用户界面:数据信息网页

  用户代理信息

  ips:代理设置

  表格:蒙哥集合对象

  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 ).文本

  dic[总价_万]=搜索(r(\d)万,价格)。组(1)

  dic[单价_元]=搜索(r(\d)元,价格)。组(1)

  base_info=soup.find(div ,class_=base )。查找( ul ).查找全部(李)

  对于基本信息中的李:

  st=re.split(r .*? ,字符串(李))

  dic[st[2]]=st[3]

  transaction _ info=汤。find( div ,class_=transaction ).查找( ul ).查找全部(李)

  对于交易信息中的李:

  st=re.split(r .*? ,字符串(李))

  dic[st[2]]=st[4].替换( \n , ).替换( ,)

  loc=re。search(r resblockposition:([\d.]),([\ d .]) ,r.text)

  dic[lng]=位置组(1)

  dic[lat]=位置组(2)

  table.insert_one(dic)最后的可视化代码如下

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

  errorlst=[]

  计数=1

  对于urllst中的u:

  打印(程序正在休息.)

  时间。睡眠(5)

  尝试:

  get_data(u,dic_headers,dic_cookies, a ,datatable2)

  打印(f 成功采集{count}条数据)

  计数=1

  除了:

  errorlst.append(u)

  打印(数据采集失败,网址为:,u)输出结果:

  数据库中的数据

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: