1。写在前面
作为一个活跃在京津冀地区的开发者,要闲着没事就看看<代码>石家庄代码>这个国际化大都市的一些数据,这篇博客爬取了链家网的租房信息,爬取到的数据在后面的博客中可以作为一些数据分析的素材。
我们需要爬取的网址为:https://sjz.lianjia.com/zufang/<代码> 代码>
2。分析网址
首先确定一下,哪些数据是我们需要的
可以看的到,×××框就是我们需要的数据。
接下来,确定一下翻页规律
<代码> 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
<代码>自我。_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】:链家租房数据抓取