主页 > SEO攻略 > 怪不得你的爬虫一页数据都抓不到。新百胜公司

怪不得你的爬虫一页数据都抓不到。新百胜公司

新百胜公司电话 SEO攻略 2020年06月12日
大家好。今天小编又和大家见面了。我是团队中的python高级研发工程师。日常工作是开发python代码;偶尔还要来平台写写文章;最近老板又给我安排一个活:帮助粉丝解决各种技术问题。
 
是的。朋友们如果在做项目或者写代码的过程中遇到了问题。欢迎私信小编。小编每天都会抽出一定的时间来帮忙解决粉丝朋友们的问题。此外。朋友们还可以私信来索取精美简历模板哦。
 
 
问题描述
 
今天这位朋友的问题是。他在window7下面。使用python3.7和scrapy框架抓取百度图片。由于使用了框架。所以程序很快就开发好了。但是启动爬虫之后。发现连第一页数据都抓取不到。爬虫就退出了。
 
由于scrapy框架打印了近百行的错误输出。所以很难定位问题。这位朋友反复检查了几次代码。又在chrome浏览器里面重新抓包。都找不出来问题的原因所在。
 
甚至他还用php代码模拟了scrapy中类似的抓取功能。发现抓取百度图片的功能代码运行起来非常的正常。从直觉出发。看来问题还是出在scrapy框架里面。
 

 
问题定位
 
小编向这位朋友索要了代码。然后在自己的开发机里面尝试运行了一下。也是同样的结果。抓第一页数据的时候。爬虫就出错退出了。
 
通过仔细观察日志。小编在近百行的出错日志里面很敏捷地就发现了几个关键词: Forbidden by robots.txt。翻译成中文。就是“robots.txt禁止爬虫抓取”。
 
 
问题原理
 
小编又仔细地观察了一下爬虫的debug日志。发现一个规律:爬虫在请求我们设定的url之前。它会先向服务器根目录请求一个txt文件。也就是robots.txt。
 
robots.txt文件是一个文本文件。使用任何一个常见的文本编辑器。比如Windows系统自带的记事本。就可以创建和编辑它。它是搜索引擎访问网站的时候要查看的第一个文件。它会告诉蜘蛛程序在服务器上什么文件是可以被查看的、什么文件是不允许被查看(抓取)的。
 
 
当一个搜索蜘蛛访问一个站点时。它会首先检查该站点根目录下是否存在robots.txt。如果存在。搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在。所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。
 
Robots协议用来告知搜索引擎哪些页面能被抓取。哪些页面不能被抓取;可以用来屏蔽一些网站中比较大的文件。如:图片。音乐。视频等。节省服务器带宽;或者屏蔽站点的一些死链接。也可以方便搜索引擎抓取网站内容;设置网站地图连接。方便引导蜘蛛爬取页面。
 
 
因为默认scrapy遵守robots.txt中的协议。所以会先请求这个文件查看自己的权限。而我们现在访问这个robots.txt得到:
 
User-agent: * Disallow: /
 
意思是不允许任何的爬虫抓取任何的页面。于是scrapy框架就停止了后续的url请求和页面解析。
 
这也就解释了为何用php写的代码抓取起来就非常的正常。因为php并没有去预先请求robots.txt。
 
 
问题解决
 
知道了问题的原理。解决起来就很顺手了:只要让scrapy框架不去请求robots.txt就可以了。
 
翻了翻scrapy的官方文档。很容易就找到了解决办法:
 
settings.py中把ROBOTSTXT_OBEY从True改成False就可以了。 撒花。
广告位
标签: SEO攻略