一、先观察网页结构
链家成交记录网址:https://bj.lianjia.com/chengjiao/
每页有30条成交记录,点击记录提示要下载APP才能查看详细信息。不管它,我们直接审查元素,找到成交记录的链接,点击打开。如下图
链接后面有一串数字,应该是这个成交记录的id号,由于记录每日更新,我们每次爬取完成之后用一个txt文本保存最新记录的id号,以便下次准确定位爬取结束的位置。
接下来回到成交记录页面,观察其翻页时网址的变化:
https://bj.lianjia.com/chengjiao/pg2/
https://bj.lianjia.com/chengjiao/pg3/
地址后加上:/pg+页数 就可以翻页了。
然后在详细信息页面观察要爬取的内容,如图:
包括基本属性、交易属性、成交额、成交单价和成交日期,全部爬取。
接下来老规矩,审查元素,找到这些内容所在的标签:
标签位置已经清楚,说一下爬取的基本思路:
先获取30个记录的链接,然后依次爬取信息,最后打开下一页,循环往复。
这是为了在第一次爬取的时候(有100页),一旦出现异常,可以将已爬取的先保存。
二、代码解析
需要的包有numpy,pandas,BeautifulSoup,re,urllib等
代码解析如下:
1、getbsobj函数
def getbsobj(url):
try:
html = urlopen(url,timeout=3)
except (HTTPError,socket.timeout):
return None
return BeautifulSoup(html,'html.parser')
定义一个返回bs对象的函数,包括一些异常处理。
2、getLinksList函数
def getLinksList(url,n):
'''
:param url: 链接
:param n: 第n页
:return: 链接列表
'''
ls = []
bs