Python爬虫实战第三场

需求

快要毕业了,出来找实习,所以要找个房子租,但是是第一次出来找房子住,所以也不太清楚这边的租房情况,该租个单间带独卫的还是多人间的?房价大概又在多少?哪里的房价又高一点?

所以打算爬取我爱我家上的某地区的租房信息来进行数据分析一波(本篇暂讲解如何爬取)

https://sh.5i5j.com/zufang/

爬取区域选择在上海

一、详细需求

可以看到我爱我家上海租房信息共有13234条,我们需要获取的有房源标题、类型几室几厅、面积、朝向、楼层、地址、发布时间、标签、月租金额、出租方式、所属地区等

二、数据如何加载

来看看网页源代码中

我们所需要的数据基本上都在,这就很舒服

初步分析可以得知,每一页有30条房源信息,也就是说共有430多页的数据

对于这种大小的数据我们一般会想到用scrapy,毕竟scrapy是基于twisted开发的所以其异步的请求方式无疑会提高爬虫的效率,也是爬虫开发的一大利器

但是对于这次的需求,scrapy貌似有点力不从心;结果我可以这么说,如果用scrapy,当你访问我爱我家的官网的时候,一般来说我们会设置

但是这里必须将其设置为True才可正确访问到官网,这也就意味着我们遵从了这个机器人协议,会限制我们的爬虫,这对一个爬虫来说是不利的

这还不算什么,更让人头疼的是,你就简单的爬取了几页之后会发现之后怎样都爬取不了数据,为什么?

打印一下响应的内容之后你会发现这么一句:该请求已被网宿云WAF拦截......

简单来说就是你的爬虫已经被识别了,并且人家还封了你的IP

好,那我换个IP访问可以了吧?可以,但是没过多久你又会被封......

也就是说我们还是通过脚本的形式爬取,但是官网的反爬比较严重

那怎么办,该换一个网站爬吗?当然不可能,作为一个虫师,怎么能面对这么点困难就要跳过

重点来了,仔细想想,能不能换种别的方式获取数据?比如我们之前提到过的,微博有三个站点可以获取数据,那么我爱我家会不会有m站,会不会有wap站呢?

wap站没有,但是好在,有我爱我家的m站!

https://m.5i5j.com/sh/zufang/

惊喜之余,对其进行常规的分析可以知道,m站的数据在网页源代码中也有,但是通过获取网页源代码中的数据还是会被封,所以我们还是通过ajax加载数据的接口来获取json数据才是最稳妥的,而且json数据中有我们所需的全部数据,甚至更多

这里的url链接是一样的,但要获取json数据,必须带上请求头中的内容才可以,否则返回的还是网页源代码的数据

为了方便我们可以直接把整个请求头拿过来用,对于得到返回只要response.json()就可以取到其中所有的值了

之后就是保存到数据库中啦,通过这个接口爬取,完全不用担心被封IP,但是也要注意控制时延,避免对其服务器造成过大负担,要是之后我爱我家对这个接口进行了限制,就很难再获取大量的数据了

三、数据提取中几个注意的点

1、爬取对象为我爱我家的m站,访问接口时需要带上请求头

2、控制时延

四、实战结果

取完我爱我家上海地区租房的信息,共13000多条,可用作之后的数据分析用

代码我就搁这儿了!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181219G1K8GP00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券