在抓取动态页面的时候会出现一些特殊的情况导致获取json取得数据比较困难,这个时候只能使用其他的爬取自动化爬取方式,但是相对门槛比较高比较麻烦,所以对于一些特殊的情况可以采取一下半自动化的手段--保存html后进行爬虫。
例如现在我想爬取一个饿了么的店铺里的商品信息和商品的价格
1.首先登陆饿了么的网页端https://h5.ele.me/
2.登陆之后我们可以很明显看到是手机端的页面,按F12进入开发者模式(使用的是Chrome浏览器),点击下图红框部分可以切换网页和手机视图浏览
3.之后选择一家店进入。需要注意的是饿了么店铺之间的差距其实还是比较大的,需要找一个商品数量较多,分级层数也比较多的店铺来做测试
4.之后同样右键查看源码,直接找第一个商品的名称,发现源码中没有对应的商品名称,基本上可以确定是动态加载的页面
5.按F12进入开发者界面,选择XHR并刷新界面,按Ctrl+F查找商品名称,根据返回的结果并查看对应的文件中的内容可以定位文件
多层下拉后可以找到对应的数据位置
6.目前看起来似乎还好,页面中加载了所有的需要的数据,但是当接着
向下看就会有问题出现。例如这里选择儿科用药:
会发现一个页面中对应的有多个动态加载文件,也就是说在下拉的过程中动态加载的。
7.这样没有办法,去找一下请求URL有没有规律吧。通过比较发现URL中前后差别较大而且无法找到固定的规律
在线文本比对工具:https://text-compare.com/
所以对于这样的网站无法一个一个请求URL获取数据,就可以先保存HTML文件到本地之后再解析
1.首先将网页下拉到最后,右键保存网页
2.打开下载的html文件,可以看到所有的数据已保留,这个时候就可以像普通的静态网页一样解析即可。唯一的区别就是不是再用request去请求网页解析,而是直接解析本地的html文件
这种方法算是无法爬取页面的一个解决办法,算是一个半自动化的方法。
相关源码及文件可以关注公众号:Romi的杂货铺,回复“饿了么商品爬虫”获取