18910140161

python爬取链家网租房数据

顺晟科技

2021-06-16 10:43:02

182

写在前面 在前一篇文章中,我们谈到了如何抓取多页网页,并学习了爬虫的基本原理和步骤。所以这一期的边肖打算再接再厉,引入跨页爬虫的原理。考虑到八月将逝,九月即将来临,新的租房需求即将诞生,本期《边肖》将讲述如何利用python对链家网上的租房信息进行抓取,希望对大家租房有所帮助。下面正式开始! 准备和需求分析 跨页爬虫的基本原理和步骤在前面的文章中已经介绍过了,这里就不多说了。考虑到任何爬虫都是需求网页,获取网页,然后解析网页获取相关数据,最后保存数据进行分析,跨页爬虫自然无法逃脱这个套路。与多页面爬虫相比,跨页面爬虫需要定义一个额外的功能来抓取网页链接。本文仍以python为工具,详细介绍如何使用python及相关库对链家网的租赁数据进行抓取。在爬行租赁数据之前,我们需要先问一个问题。在爬行过程中我们需要获取哪些信息?在这里边肖认为既然要抓取租房的相关信息,那么房子的名字自然是必须的,房子的位置和价格信息自然是不可或缺的。最后,在考虑了很多因素和链家的网站结构后,边肖决定获取十种租赁信息:房屋名称、房屋所在住宅区、房屋所在商业区、房屋所在区域、房屋价格、房屋大小、户型、附近地铁、房屋经纪人以及相应的联系电话。考虑到边肖住在广州,对广州情有独钟,这里所有的租房信息都是广州的租房信息。当然,你也可以通过替换边肖的代码得到不同城市的租房信息。既然已经明白了要求,就正式开始爬虫作战了。在爬行之前,让我们导入相应的库。 导入请求 从bs4导入美化组 将xlwings导入为xw 导入时间 前两个库是完成爬虫的主力,第三个库是用来存储Excel中的数据,第四个库主要是导入使用库中的休眠函数来处理反爬。因为跨页抓取器需要抓取网页中的网页链接和信息,所以下面需要定义两个函数,一个用于抓取网页链接,另一个用于抓取详细的网页数据。首先介绍个功能。 网页链接抓取功能的构建 所谓网页链接,就是当你点击时,会弹出另一个网页。链家网上的租房信息就是这样的结构。在首页点击房屋名称,会弹出房屋的详细信息,需要的租房数据会保存在详细信息页面。但是,为了到达详细信息页面,您必须首先获得到达该页面的网页链接,这就是为什么您需要定义爬行网页链接功能。当然看起来很高,但是不得不说,爬网页的链接真的很容易。 header={ ' User-Agent ' : ' Mozilla/5.0(Windows NT 6.1;Win64x64) AppleWebKit/537.36 (KHTML,喜欢Gecko)chrome _ 6494 _ 1 . html ' target=' _ blank ' chrome/xxxxx

Xxxx Safari/537.36'} #记得用自己的请求头文件替换

def get_url(url):

res=requests.get(url,header=header)

bsobj=美化组(res.text,' lxml ')

URL=bsobj . select(# house-lst Li div . info-panel H2 a ')

上面的功能可以在一个页面上抓取所有房屋的具体网页链接,你可以看到上面没有新的命令,前面的文章已经介绍过了,这里就不描述了。通过这个函数,可以得到详细页面的链接,所以下一步就是构造一个函数来抓取详细页面数据。

对详细页面数据进行爬网

def get_info(url):

res=requests.get(url,header=header)

bsobj=美化组(res.text,' lxml ')

title=bsobj.find('h1 ',{'class':'main'})。get_text()

price=bsobj.find('span ',{'class':'total'})。get_text()

area=bsobj.find_all('p ',{'class':'lf'})[0]。get_text()[3:]

house_type=bsobj.find_all('p ',{'class ',' lf'})[1]。get_text()[5:]

metor=bsobj.find_all('p')[4]。get_text()[3:]

park=bsobj.find_all('p')[5]。get_text()。拆分(' \n')[0][3:]

distinct=bsobj . find _ all(' p ')[6]。get_text()。拆分(')[0][3:]

bankuai=bsobj.find_all('p')[6]。get_text()。拆分(')[1]

broker=bsobj.find('div ',{'class': 'brokerName'})。get_text()。拆分(' \n')[1]如果bsobj.find('div ',{'class': 'brokerName'})不是无其他0

phone=bsobj.find('div ',{'class': 'phone'})。get_text()。长条()。替换(' \n ',' ')。如果bsobj.find('div ',{'class': 'phone'})不是None其他0,则替换(',')

在获取网页信息时,边肖使用了find和find_all函数,所以这里有必要介绍这两个函数。这两个函数,顾名思义,是根据函数中的参数选择对应的内容,个参数是网页标签,第二个参数是属性对。一般来说,在网络爬虫中掌握这两个参数就足够了。这两个函数的典型区别在于,find函数选择个满足参数设置的项,而find_all函数用于选择所有满足参数值的项并形成一个列表,所以find_all参数的使用往往伴随着列表选择。至于参数值的设置,需要掌握一些网页代码的基础知识。这里不多说。有兴趣的朋友可以看看相关书籍。此外,在代码中,边肖还使用了一些字符串操作功能,主要包括拆分、替换和剥离。个用于根据指定的符号将字符串分成中间列表;第二个函数用于替换字符串的内容;第三个函数用于消除字符串中的空白。这三个功能是网页爬虫中经常用到的,希望你能熟练掌握。边肖关于这些功能也在以前的文章中介绍过。你可以参考边肖之前关于字符串介绍的文章。最后还要说明最后两行代码,使用的是二进制选择表达式。由于有些房子没有经纪人信息和联系电话信息,为了避免这种情况造成程序中断,采用二进制选择表达式构造变量值,在某些场景下极其有用。现在已经有了相应的web链接抓取功能和具体的web信息获取功能,是时候把它们整合在一起了。完整的代码如下。

抓取链接租赁数据的详细代码

# _*_ coding:utf-8 _*_

'''

@Author:刘仆

@Filename:贾立安_zufang.py

@Date: 2018-8-20

@Description:

# usage:抓取链家网租赁数据

# platform : win 7 python 3 visual studio代码

'''

#导入关联库

导入请求

从bs4导入美化组

将xlwings导入为xw

导入时间

#创建一个Excel文件并命名标题行

wb=xw。书()

sht=wb.sheets[0]

Sht.range('A1 ')。值='属性名'

Sht.range('B1 ')。值='社区'

Sht.range('C1 ')。价值='商业区'

Sht.range('D1 ')。值='区域'

Sht.range('E1 ')。价值='价格'

Sht.range('F1 ')。值='面积'

Sht.range('G1 ')。值='公寓类型'

Sht.range('H1 ')。值=' subway '

Sht.range('I1 ')。value=' broker '

Sht.range('J1 ')。值='联系号码'

header={ ' User-Agent ' : ' Mozilla/5.0(Windows NT 6.1;Win64x64) AppleWebKit/537.36 (KHTML,喜欢Gecko) Chrome/

我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航