Python Scrapy请求方法不起作用
问题描述:
我正在尝试使用下面的Scrapy
的Request
方法,但它不会调用callback
self.link_to_problem
。 URL的所有印刷正确的,当我打电话print path
,我也尝试打开这些网址在我的浏览器和格式正确无误。有人可以确定代码中是否有问题?Python Scrapy请求方法不起作用
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.http.request import Request
import scrapy
def parse_item(self, response):
for link in response.xpath("//div[@id='siteTable']//div[@class='entry unvoted']/p[@class='title']/a/@href").extract():
path = "https://www.reddit.com" + str(link)
print path
yield Request(path, callback=self.link_to_problem, errback = self.error_print)
def link_to_problem(self, response):
print response
print "------------------------------------------------------------------------------------------"
答
即使发布的代码是正确的(乍一看似乎对我来说),您的刮板很可能无法正常工作。
原因/问题:有没有User-Agent头集,看起来像一个真正的浏览器的所有客户端的reddit.com块的请求。
Scrapy默认发送'scrapybot'作为用户代理,并将因此被阻止。
解决方案:在您的请求中设置User-Agent标头,就像真正的浏览器所做的那样。
这可以通过添加以下行到你scrapy项目的settings.py文件来完成。
USER_AGENT = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0'
是'link_to_problem'叫?你检查过吗?提问时也要小心谨慎。 – Mani
没有'link_to_problem'没有被调用,我为什么认为可能是我如何调用Request方法有问题。 –
我看不出有什么问题的代码,请仔细查看项目设置和代码。或者尝试删除errback。 – Mani