Python爬虫入门【16】:链家租房数据抓取

  

1。写在前面

  

作为一个活跃在京津冀地区的开发者,要闲着没事就看看<代码>石家庄这个国际化大都市的一些数据,这篇博客爬取了链家网的租房信息,爬取到的数据在后面的博客中可以作为一些数据分析的素材。
我们需要爬取的网址为:https://sjz.lianjia.com/zufang/<代码>

  

2。分析网址

  

首先确定一下,哪些数据是我们需要的

  

 Python爬虫入门【16】:链家租房数据抓取

  

可以看的到,×××框就是我们需要的数据。

  

接下来,确定一下翻页规律

  
 <代码> https://sjz.lianjia.com/zufang/pg1/https://sjz.lianjia.com/zufang/pg2/https://sjz.lianjia.com/zufang/pg3/https://sjz.lianjia.com/zufang/pg4/https://sjz.lianjia.com/zufang/pg5/?
  https://sjz.lianjia.com/zufang/pg80/Python资源分享群784758214,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎 
  

3。解析网页

  

有了分页地址,就可以快速把链接拼接完毕,我们采用<代码> lxml 模块解析网页源码,获取想要的数据。

  

本次编码使用了一个新的模块<代码> fake_useragent>   

本篇博客主要使用的是调用一个随机的UA

  
 <代码>自我。_ua=UserAgent ()
  自我。_headers={“用户代理”:self._ua。随机}#调用一个随机的UA
   
  

由于可以快速的把页码拼接出来,所以采用协程进行抓取,写入csv文件采用的熊猫<代码> 模块

  
 <代码>从fake_useragent UserAgent进口
  从lxml进口etree
  进口asyncio
  进口aiohttp
  熊猫作为pd导入
  
  类LianjiaSpider(对象):
  
  def __init__(自我):
  自我。_ua=UserAgent ()
  自我。_headers={“用户代理”:self._ua.random}
  自我。_data=https://www.yisu.com/zixun/list ()
  
  异步def(自我,url):
  异步与aiohttp.ClientSession会话():
  试一试:
  异步session.get (url,标题=self._headers超时=3)职责:
  如果resp.status==200:
  结果=等待resp.text ()
  返回结果
  除了例外e:
  打印(e.args)
  
  异步def parse_html(自我):
  页面的范围(77):
  url=" https://sjz.lianjia.com/zufang/pg {}/?format(页面)
  打印(“正在爬取{}“.format (url))
  html=等待self.get (url) #获取网页内容
  html=etree.HTML (html) #解析网页
  self.parse_page (html) #匹配我们想要的数据
  
  打印(“正在存储数据....”)
  # # # # # # # # # # # # # # # # # # # # # # # # #数据写入
  data=https://www.yisu.com/zixun/pd.DataFrame (self._data)
  data.to_csv(“链家网租房数据。csv”,编码=' utf_8_sig ') #写入文件
  # # # # # # # # # # # # # # # # # # # # # # # # #数据写入
  
  def运行(自我):
  循环=asyncio.get_event_loop ()
  任务=[asyncio.ensure_future (self.parse_html ()))
  loop.run_until_complete (asyncio.wait(任务)
  
  if __name__==癬_main__”:
  l=LianjiaSpider ()
  l.run ()
   
  

上述代码中缺少一个解析网页的函数,我们接下来把他补全

  
 <代码> def parse_page(自我、html):
  info_panel=html.xpath ("//div [@class='信息']”)
  在info_panel信息:
  地区=self.remove_space (info.xpath(”。//跨度[@class='地区']/text ()”))
  区=self.remove_space (info.xpath(”。//跨度[@class='带']/跨度/文本()))
  米=self.remove_space (info.xpath(”。//跨度[@class='米']/text ()”))=self.remove_space (info.xpath (“。//div [@class=', ']/跨度[4]/text ()))
  
  con=info.xpath (”。//div [@class='反对']/text ()”)
  地板=反对[0]#楼层
  类型=反对[1]#样式
  
  代理=info.xpath (”。//div [@class='反对']//text ()) [0]=info.xpath (”。//div [@class='离开机构']//text ()”)
  
  价格=info.xpath (”。//div [@class='价格']/跨度/text ()”) [0]
  price_pre=info.xpath (”。//div [@class=' price-pre ']/text ()) [0]
  look_num=info.xpath (”。//div [@class='方']//跨度[@class=皀um”]/text ()) [0]
  
  alt=" Python爬虫入门【16】:链家租房数据抓取"> 

Python爬虫入门【16】:链家租房数据抓取