最近我写的爬虫在爬取数据的时候变得不太好用了,两三天前还是可以正常爬取数据的,今天运行的时候返回了空值。我打开源代码,将抓取的网页内容print出来看了一下,发现返回了这样一个网页:
“Request unsuccessful”,这个请求没有成功......;我注意到返回的这个HTML的头文件中有一个属性中出现了robots的字样,
以前没有见过这个属性,因此觉得问题的突破口可能就是这个,上网百度之后发现,NAME=ROBOTS和content=“noidex,nofollow”这两个attribute就是用来屏蔽网络爬虫的。因为我的爬虫程序比较简单,在使用requests.get()的方法时并没有发送headers过去,因此被网站认为是网络机器人(网络爬虫),限制了我的程序对网站的访问。
知道了问题的原因,接下来就容易多了;打开Chrome,F12打开开发者工具,在Chrome地址栏输入要爬取的网址,然后如下图所示,找到网页主体内容:
我这里抓取的网页主体是一个HTML文件,所以点击这个HTML文件,右侧栏就会出现这个请求的详细信息,这里我需要用到request headers里面的信息;既然网站将我们判定为机器人,那我们就将程序模拟人的操作,这时候headers就派上用场了。
一般情况下,只需要将User-Agent的信息传递过去就可以了,但是对于一些验证比较严格的网站,可能需要的信息就要多了;这个时候,我们就将request headers里面的请求头一个一个传进去试一下。
我这里最开始的时候只传Referer和User-Agent进去的时候就可以正常取回数据了,可当我第二次运行的时候,就又返回了request unsuccessful,最后我将cookie传进去之后就没啥问题了。但是我这里传递的cookie是固定的,不具有普适性,后续有空了会再更新这篇博客。