先说结论,关闭scrapy自带的ROBOTSTXT_OBEY功能,在setting找到这个变量,设置为False便可解决。 使用scrapy爬取淘宝页面的时候,在提交http请求时出现debug信息Forbidden by robots.txt,看来是请求被拒绝了。开始由于是淘宝页面有什么保密机制,防止爬虫来抓取页面,因而在spider中填入各类header信息,假装成浏览器,结果仍是不行。。。用chrome抓包看了半天感受没有影响简单页面抓取的机制(其余保密机制应该仍是有的,打开一个页面时,向不一样服务器递交了不少请求,还设定了一些不知道干啥的cookies),最后用urllib伪造请求发现页面都能抓取回来。因而上网查了一下robot.txt是什么,发现原来有个robot协议,终于恍然大悟: 咱们观察scrapy抓包时的输出就能发现,在请求咱们设定的url以前,它会先向服务器根目录请求一个txt文件:chrome
2016-06-10 18:16:26 [scrapy] DEBUG: Crawled (200) <GET https://item.taobao.com/robots.txt> (referer: None) 1 2 这个文件中规定了本站点容许的爬虫机器爬取的范围(好比你不想让百度爬取你的页面,就能够经过robot来限制),由于默认scrapy遵照robot协议,因此会先请求这个文件查看本身的权限,而咱们如今访问这个url获得浏览器
User-agent: * Disallow: / 1 2 能够看见,淘宝disallow根目录如下全部页面。。。。(彷佛有新闻说淘宝关闭了爬虫对它们的爬取权限,由于涉及到用户隐私)因此scrapy就中止了以后的请求和页面解析。 咱们在setting改变ROBOTSTXT_OBEY为False,让scrapy不要遵照robot协议,以后就能正常爬取了。服务器
2016-06-10 18:27:38 [scrapy] INFO: Spider opened 2016-06-10 18:27:38 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 2016-06-10 18:27:38 [scrapy] DEBUG: Crawled (200) <GET https://item.taobao.com/xxxxxxx> (referer: None) 1 2 3 4 对于使用robot协议的站点,只须要咱们的爬虫不遵照该协议,就能够了,可是对于防止爬虫爬取,站点还有检查请求头、检查ip等等手段,还须要其余的相应处理。cookie