我们通过自动和手动两种方式来获取门店列表,你可以两种都试试。
之后获取了全部属性后,点击提取测试,系统会自动优化XPath,列表父节点会显示在下方。
笔者建议自动加手动配合的方式,自动抓取大部分数据,再用手动修改调整,手气不错虽然智能,但并不是什么时候都管用。
我们先用50页数据试试手,在刚才那个浏览器页面的最下方,点击翻页,可以发现是如下的结构:
如果看到这一步累了,可以不看下面的内容,但如果想获取全部内容,步骤就复杂多了,如果你下决心学习,我们接着往下看
解决问题的办法是分而治之,获取每个区县(如北京的海淀区)下的某一种美食门类(东北菜),自然就没50页那么多了。所以,要获取美食门类,再获取所有的区域。
拖入HTML字符转义到Text列,可以清除该列的乱码
再拖入字符串分割到Text,勾选空格分割,可对该数据用空格分割,并获取默认的第一个子串
拖入删除该列到OHTML,该列没有用
拖入删除该列到HTML
直接在Text列的上方修改名称为门类
如果自己做不下来,也没有关系,加载Github上大众点评的教程.xml,可以直接用这个现成的模块,也可以单步调试之,看看它是怎么写的。
下面是最难也是最复杂的部分。我们的思路是,组合所有的门类和区域,构成m*n的一组序对,如海淀区-北京菜,朝阳区-火锅等等,获取对应序对的页数,再将所有结果拼接起来。准备好了么?我们继续。
一道大菜要非常注意细节,爬虫也一样。
目前Hawk没有强的自动建表功能,因此建议使用MongoDB,如果你已经安装了,在模块管理的数据源哪里,点击右键,可新建MongoDB连接器。可以在主流程的最后位置,在拖入写入数据库,即可。
即使是刚才这样的复杂操作,依然不能获取所有的美食,因为火锅太火,朝阳海淀的火锅都超过了50页,解决方法是再细分商区,比如朝阳的三元桥,国贸,望京...这样就能完整解决了。但本文限于篇幅就不讨论了。
在右下角的数据管理,在要导出的表上点右键,建议输出为xml,json和txt文件,excel文件在数据量较大(5万以上)会有性能问题。
效率!所见即所得!你可以试着用任意一种代码去写,烦死你
Hawk是WPF,C#开发的,因此只能在Windows上运行,不过它生成的xml可以被Python解释,参考github上的etlpy.