今天主要分享一些关于寻找爬虫入口的小技巧心得。
写着篇文章的原因是在工作中要去做一个关于作业帮的任务,而作业帮只有app, 当然可以通过对app进行抓包来获取数据;同时也可以根据一些问题的相关问题,层层递进去获得数据。我一开始采用的就是后一种方法,但是这种方法有几个不太好的地方:
(1) 很容易获取到脏数据。比如我本来的任务是获取一些语文方面的问题数据资料,但是当我以某一个语文类的问题为初始网址进行爬取时,发现后面获得的数据竟然都是英语类型的了。
(2) 效率很低。
那么,对于这种的爬虫任务到底有没有更好的爬虫入口呢?很明显,有的。
寻找爬虫入口
1 、本次任务的入口
这个爬虫的更好的入口就是我们平常使用的搜索引擎。搜索引擎虽然有很多种,但是其实都是在干一件事,收录网页,处理,然后提供搜索服务。在平时使用的过程中,我们通常都是直接输入了关键词就直接搜索了,但是其实还有很多的搜索技巧, 比如对于这个任务来说,只要我们这样搜索,就可以得到我们想要的数据了。
现在我们在百度,谷歌, 搜狗, 360,必应里都分别试一下:
从上面的图中可以发现返回的数据量都在百万甚至是千万级别。
所以把这些数据作为这个任务的入口,显然是更好的。至于说应对反爬虫的措施,那就考验个人的基本功了。
2、其他的入口
(1) 移动端入口
通过网站的移动端入口进行获取数据,可以更好更快速的获取数据。
寻找移动端入口的最简单的方式就是用打开谷歌浏览器的开发者模式以后,点击下面的手机样子的东西,然后在刷新一下就可以了。
这种方法也不是万能的,有的时候我们可以把网址发到我们的手机上,然后手机浏览器打开,看一下在手机上面显示的格式是否与电脑上的不一样,如果不一样的话,就可以再把手机浏览器的网址复制一下发到电脑上了。
(2)网站地图
网站地图是指可方便网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页, 所以通过这些网站地图可以更高效更方便的获取一些作为下一级入口的网址。
(3)修改网址中的数值
首先申明,这个技巧不是万能的。
这个技巧主要是通过对网址中的某些字段的数值来从一次请求中最大限度的获取所需的数据,减少请求数,也就减少了被网站封禁的风险, 也就可以提高爬虫的效率。下面以一个例子为例:
当爬取QQ音乐的某一个歌手的全部音乐数据时,抓包获得的格式如下:
https://xxxxxxxxx&singermid=xxxx&order=listen&begin={begin}&num={num}&songstatus=1
返回的数据包如下:
数据
其中的一些字段值被我以xxx代替了,请注意这里的num字段,通常一个歌手的歌比较多时,数据都是通过下一页展示出来的,所以这里的begin就应该是每一页第一条的对应的值,而num则是这个页面有多少条数据。通常,我们可以一页一页的获取数据, QQ音乐的默认值是30。那么我们是不是非得至少请求4次才可以获得完整数据呢?
当然不是,其实这个时候,我们可以自己试一下改变网址中的一些数值时,返回的结果是否会发送变化。在这里,我们就改变num与begin的值,其中设置num就是某一个歌手所有的歌曲数量的值,begin为0,这个时候再重新请求修改之后的网址,就可以得到下面的数据:
修改后得到的数据
从上面可以看到,返回了96条数据。
这样,我们可以通过2次请求获取到所有的数据了。第一个请求获取total数目,然后再修改网址重新请求,这样就可以获得所有的数据了。
类似的字段还有pagesize。
总结
上面的这些寻找爬虫入口的小技巧可以使我们事半功倍,有的时候可以以最少的代价获取到数据。
作者:这段日子真的很难
链接:https://www.jianshu.com/p/e86ee11ab462