菜鸟爬虫——获取安居客二手房信息

前言

因为需要一些二手房数据,菜鸟开启了爬虫之路!不过需要注意的是,在爬取数据时,要遵守《中华人民共和国网络安全法》以及《规范互联网信息服务市场秩序若干规定》等相关法律规定(毕竟我们要做一个知法懂法的好公民,不能违法!)。

了解爬虫

首先需要了解一下爬虫机制、python的基本语法、爬虫框架(scrapy等)、爬虫常用的一些库、网页解析工具(正则表达式、XPath等)、反爬虫机制,进阶后可能还要多线程、多进程爬取、以及一些特殊网页的爬取(登录问题、动态网页等)等等… …作为菜鸟的我,只为了能够快速获取数据,有些内容也没有深层次的理解,如果大家对于爬虫非常感兴趣,也可以专门去学一学相对应的内容。这里简单说一下我的理解:我所理解的爬虫过程就是模拟浏览器发送请求,然后下载网页代码,只提取有用的信息,最后放入数据库或者文件中。

爬虫目录结构

在安装好爬虫需要的一些库(scrapy)等以后,就可以找爬虫框架或者github上下载的爬虫代码,如下图所示,是爬虫目录的结构,这里包括了:

spiders文件夹 #放置关于爬虫部分的内容

_init_.py#项目初始化文件

items.py#数据容器文件

middlewares.py#中间件

pipelines.py #管道文件

settings.py#项目的设置文件

scrapy.cfg #项目运行的配置文件

爬虫主体代码

首先先看spiders文件夹里的ershoufang.py文件 ,这里的逻辑是这样的,以我爬取的安居客长春二手房为例:——>先点进安居客首页——>点击二手房、房源

——>进入了二手房页面点击南关(因为我是需要分区的房屋信息,所以我是点进去每个区来爬取的),这里需要注意上方的网址,这也是我们最开始的初始网址,简单观察可以发现后面的数字是从p1-50的,代表着页数,nanguan代表着这个

——>接下来网页向下翻就是每个我们需要爬取的链接入口

——>点进去就是每一个房源信息了。

知道了这个逻辑,代码就好理解了,我们上代码!!!

这里应用了XPath来采取信息(应用re正则会是一种更好的选择,但是本人比较菜,在用爬虫时觉得XPath很好理解)。我们来说一下XPath,这里简单举一个例子,以房屋信息里面的housuInfo为例,对应如下图部分。先将鼠标放在房屋信息附近,点击右键,在点击检查,找到网页源码中对应要采集的信息部分(红色圈中的内容)填进XPath里,具体也可以再详细了解。

还有一个比较难的问题,就是历史价格的爬取,历史价格的数据不在网页源代码中,而是通过ajax加载的,按下图可以找到历史价格存储的网址,这里也需要解析网址(比如长春,网址中就是cc,后面都是一样的,直到commid=后面的数字是不一样的)。我们先提取后面的数字,然后再输入一个headers来模拟网址请求,防止被识别出来,然后获取历史数据。

items.py

这个文件代码如下:

可以看到我们在爬虫中应用到了哪些item,这里就定义哪些

反反爬虫策略

简单说一下我用的反反爬虫策略:1. 比较简单的是添加随机的user-agent头(网络上也有很多)

2. 设置延迟时间,也就是别那么快获取信息

注意:安居客的反爬虫太厉害了,如果在没有代理Ip的情况下,建议不要把延迟速度调的太快,太快会封ip,或者出新验证的频率过高,影响爬虫。

3. 变换ip(可以找一些ip代理来变换)

用的是阿布云代理经典版,可以买按小时计算的,1元/时,我爬的数据不多,按小时来买就足够了,不是广告!!!!如果需要可以看看别的代理~

运行爬虫

执行指令:

scrapy crawl ershoufang -o file_name.csv

运行结果如下如 :