Scrapy中scrapy.Request失效:爬虫抓取0页问题求助
问题分析与解决
问题场景
爬虫抓取页面数为0,改用yield scrapy.Request替代原有的Rule规则后出现异常。当前parse代码如下:
def parse(self, response): all_companies = response.xpath('//header[@class = "card-header"]') for company in all_companies: company_url = company.xpath('./a[@class = "card-header-scorecard"]/@href').extract_first() yield scrapy.Request(url=company_url, callback = self.parse_company)
已通过Scrapy Shell验证company_url能正常获取,原Rule规则可正常工作:
rules = ( Rule(LinkExtractor(restrict_css=".card-header > a"), callback="parse_company") )
可能的原因及解决方法
爬虫类继承错误
如果你的爬虫类仍然继承自CrawlSpider,框架会默认使用parse方法处理Rule规则,你自定义的parse方法不会被执行。解决方法是将继承类改为scrapy.Spider:from scrapy.spiders import Spider class YourSpider(Spider): name = "your_spider" # 其他配置...URL为相对路径未处理
LinkExtractor会自动将相对路径转换为绝对URL,但手动yield Request时需要自己处理。将company_url改为绝对路径:company_url = response.urljoin(company.xpath('./a[@class = "card-header-scorecard"]/@href').extract_first())检查日志排查问题
开启Scrapy的DEBUG日志(设置LOG_LEVEL='DEBUG'),查看是否有请求被过滤、URL无效或回调函数未触发的相关信息,进一步定位问题。
内容的提问来源于stack exchange,提问作者Rodolfo
相关产品推荐
相关产品推荐

