HHDI爬虫任务配置说明
一、 摘要
爬虫任务可以从主流网站爬取相关数据存储到目标数据库表或者服务器本地文件夹spider-data中,支持以html和json的形式保存原网页信息。
二、 操作步骤
本文以安居客(https://yt.anjuke.com/sale/laishanqu/)网站为对象进行配置说明讲解。
1. 创建网页爬虫任务
打开转换任务 > 新建网页爬虫。
图1 进入网页爬虫页面路径
2. 基础信息配置
按照页面提示输入基本信息,其中任务编号和任务名称为必填项。
图2 基本信息页面
3. 登录信息配置(大部分网站可忽略此步)
登录信息配置主要为爬取网站用户名、密码和验证码等登录信息。如果待爬取的网站信息不需要登录,则可以直接跳过该部分的信息配置,如果需要登录,可参考如下配置过程:
1、 点击登录按钮,进入到登录页面
图3初始页面信息
2、 根据如下操作获取需要填写的信息:
图4登录页面信息
以上是获取【登录URL】和【登录用户字段】的操作过程(4步),其中的id:pwdUserNameIpt或者name: username可作为【登录用户字段】信息,获取其他字段的操作均可参考该部分操作。配置结果参考如下:
图5登录信息配置页面
4. 爬取页面配置
爬取页面配置是网页爬虫任务的主要配置项,主要配置入口页URL、下一页、详情页URL的爬取规则,配置好的规则如下图所示:
配置详解:
例如,我们要爬取烟台市莱山区的二手房信息,入口页地址为:https://yt.anjuke.com/sale/laishanqu/,以分页列表方式显示各个二手房的标题和摘要信息:
点击某个房产信息标题后,我们会进入该房产信息的详情页面,例:
https://yt.anjuke.com/prop/view/A1761882388?from=filter&spread=filtersearch&uniqid=pc5d26fdbf4bcb73.65789478®ion_ids=5023&position=1&kwtype=filter&now_time=1562836415
此页面显示某房产的各项详细信息,我们要爬取的就是这些详情页里边的数据:标题、总价、小区、户型、单价(下图红框中的数据)。
所以网页爬虫的爬取顺序是:进入入口页面->根据xpath找到列表页区域->进入其中的一个详情页->爬取详情页面中的数据->返回之前的列表页->爬取列表页中剩余的详情页信息->从入口页找到下一页->进入下一页的列表页->爬取下一页中的所有详情页->爬取所有列表页分页中包含的详情页数据。
了解了这个顺序,我们依次来配置爬取页面中的各项参数,
1、 配置入口页面的url
入口页填入:https://yt.anjuke.com/sale/laishanqu/。页面编码一般不选或选择AUTO即可。
注意:暂不支持入口页面中的列表页url或详情页url是通过js、jsp等程序动态产生的数据。
2、 配置爬取区域(列表页区域)的xpath
具体方法如下图的步骤所示:
第5步即可获取列表区域的xpath,设置xpath的目的是尽量缩小选中的范围,过滤掉不需要爬取的区域,并提高爬取效率,对于很多网站来讲也可以不设置xpath。
Xpath的获取也可以通过Xpath Helper插件完成,后边有介绍。
3、 配置下一页URL检索规则
爬虫会将入口页及各列表页中符合该正则表达式的URL放入下一页的集合中,逐一进入爬取,此示例中下一页的地址为:
https://yt.anjuke.com/sale/laishanqu/p2/#filtersort
https://yt.anjuke.com/sale/laishanqu/p3/#filtersort
https://yt.anjuke.com/sale/laishanqu/p4/#filtersort
…
https://yt.anjuke.com/sale/laishanqu/p50/#filtersort
因此下一页的正则表达式为:
https://yt.anjuke.com/sale/laishanqu/p\d+/#filtersort
其中\d+代表所有的数字。
4、 配置详情页URL检索规则
和列表页类似,只有符合详情页正则表达式的url才会被爬虫进入解析,观察一下各个详情页url的特征:
https://yt.anjuke.com/prop/view/A1763373777?from=filter&spread=commsearch_p&uniqid=pc5d27e258700744.44116158®ion_ids=5023&position=1&kwtype=filter&now_time=1562894936
https://yt.anjuke.com/prop/view/A1747623437?from=filter&spread=commsearch_t&uniqid=pc5d27e3d252ff17.31797303®ion_ids=5023&position=2&kwtype=filter&now_time=1562895314
我们发现详情页url中红色部分都是变化的信息,所以可以用正则表达式的通配符来代替,正则表达式如下:
https://yt.anjuke.com/prop/view/.*\?from=filter&spread=commsearch_p&uniqid=.*®ion_ids=\d+&position=\d+&kwtype=filter&now_time=\d+
注意:黄色背景中的\?表示需要将url中的?转义为\?,因为?也是正则表达式中的特殊字符。
5. 配置目标数据库表和插入参数
将爬取后的数据写入目标数据连接的某张表中
6. 配置爬取字段
爬取详情页中的具体数据并将其写入到目标表对应的字段中,如下所示,我们需要爬取标题、房价、户型、小区、单价这几项信息
其中最重要的是如何获取字段值的xpath,以“标题”为例,我们需要执行以下操作来获取标题内容的xpath:
1) 在chrome浏览器中安装xpath helper插件,如何安装请参考该博客:
https://blog.csdn.net/love666666shen/article/details/72613143
2) 进入详情页后,按Ctrl+Shift+x呼出xpath helper的窗口,再按住Ctrl+Shift移动鼠标到要爬取的内容区域上,xpath helper窗口会显示该区域的xpath全路径:
3) 这样即可获得“标题”项的xpath:
/html[@class='hb-loaded']/body/div[@id='container']/div[@id='content']/div[@class='clearfix title-guarantee']/h3[@class='long-title']
注意:需要将xpath中的红色部分删除直接写/html/body,否则会解析不到数据,应变为:
/html/body/div[@id='container']/div[@id='content']/div[@class='clearfix title-guarantee']/h3[@class='long-title']
或者写成
//*[@id='container']/div[@id='content']/div[@class='clearfix title-guarantee']/h3[@class='long-title']
4) 将xpath和数据库字段对应起来:
5) 将其它字段配置好。
7. 爬虫参数配置
爬取参数用来配置爬虫的一些参数信息,如重试次数、爬取间隔参数等
重试次数:有时网络不稳定,可能会偶尔连不上页面,该参数表示访问失败后的重试次数。
爬取间隔:爬取完一页后,需要暂停多久再爬取下一个页面,主要防止对网站过度频繁的访问。
运行线程数:爬虫的并发线程个数。
超时时间:有时网站连接速度比较慢,日志中经常出现read time out 超时的情况,这时候需要调大超时时间,比如100秒,这样这种错误就非常少了。
是否去除HTML标签:爬虫爬取的原始内容中会包含html中的一下标签,比如<p><br>等,如果需要保留这些格式,可将选项配成N。
模拟浏览器标识:有些网站对浏览器版本有要求,该参数用来模拟某个版本的浏览器。
最大爬取记录数:对于记录数非常多的网站,在开始测试时,可以通过该参数限定爬虫最多可以爬取的记录条数。默认是0,不限制。
8. 保存并测试运行爬虫任务
测试成功后,可以将爬虫任务编入作业流程中定时或手工执行。