前言
毕业将近,大部分学生出去实习或工作面临找租房的压力,此项目设计和实现了一个爬取链家网站租房信息的爬虫;该项目的功能:对爬取的网络资源进行分析,分析指定城市不同区域租房信息的并给出相关对比分析图。
一、网页分析
通过F12打开浏览器自带的抓包工具,点击查看源代码,然后就得到了网页源码中含有的第一套房的信息,通过对上图进行分析,可以通过正则表达式来获取到每个二手房详情页的url。 经过对比发现第一页每一套房的html格式都如上图类似,只有href不一样,那么我们就可以用正则表达式来提取。 代码如下:
re_f = '<a class="twoline" target="_blank" href="(.*?)"'
url_list = re.findall(re_f, html)
url_list = ['https://cd.lianjia.com' + str(j) for j in url_list]
通过上面的正则表达式,我们可以拿到第一页所有房屋详情页的url
二、详情页分析
进入详情页后,方法类似,F12查看源代码,找到我们需要爬取的数据,观察它的标签结构和属性,在代码里就可以通过Xpath对网页源码就行解析,这样就能得到想要的数据了 部分代码如下:
title = html.xpath("//p[@class='content__title']")
location = html.xpath("//i[@class='gov_title']//a/text()"
info = html.xpath("//li[@class='fl oneline']/text()")
area=html.xpath("//ul[@class='content__aside__list']/li/text()")[1]
到这里位置,我们就已经把第一页的所有房屋信息爬取到了并存储到了列表datalist中 如图所示:
三、不同页码的爬取
链家网站分区分页的url是由首页的的url+各区的拼音+pg页码构成的,通 过遍历各区和页码列表我们想要的网页的url。
首先把各个区域的基础url保存下来 代码如下:
baseurl = ["https://cd.lianjia.com/zufang/jinjiang/pg",
"https://cd.lianjia.com/zufang/qingyang/pg",
"https://cd.lianjia.com/zufang/wuhou/pg",
"https://cd.lianjia.com/zufang/gaoxin7/pg",
"https://cd.lianjia.com/zufang/chenghua/pg",
"https://cd.lianjia.com/zufang/jinniu/pg"]
对于爬取不同网页可以通过for循环依次增加页数 代码如下:
for j in range(1, 35):
url = baseurl + str(j) + "l0/#contentList"
html = askURL(url)
四、多线程爬取数据
因为单线程爬取效率不高,时间花销大。考虑使用线程池爬取不同网页。 代码如下:
pool = threadpool.ThreadPool(30)
requests = threadpool.makeRequests(get_Info, url_list)
[pool.putRequest(req) for req in requests]
pool.wait()
总结
以上就是整个项目我负责的所有内容,本文仅仅简单介绍了爬虫的基础应用,因为是第一次写,代码会有一点冗余。在这次项目的编写中,最大的收获就是发现了自己能力的不足。在今后的学习生活中,一定做到不懂就问,提高自主学习的能力和锻炼自己的动手能力。
|