这是一个简单的 scrapy 蜘蛛
import scrapy
class ExampleSpider(scrapy.Spider):
name = "dmoz"
allowed_domains = ["https://www.dmoz.org"]
start_urls = ('https://www.dmoz.org/')
def parse(self,response):
yield scrapy.Request(self.start_urls[0],callback=self.parse2)
def parse2(self, response):
print(response.url)
当您运行程序时,parse2方法不起作用,并且不打印response.url。然后我在下面的线程中找到了解决方案。
为什么我的第二个请求没有在我的 scrapy 蜘蛛的解析方法中被调用
只是我需要在请求方法中添加 dont_filter=True 作为参数才能使 parse2 函数工作。
yield scrapy.Request(self.start_urls[0],callback=self.parse2,dont_filter=True)
但在 scrapy 文档和许多 youtube 教程中给出的示例中,他们从未在 scrapy.Request 方法中使用 dont_filter = True 参数,并且他们的第二个解析函数仍然有效。
看看这个
def parse_page1(self, response):
return scrapy.Request("http://www.example.com/some_page.html",
callback=self.parse_page2)
def parse_page2(self, response):
# this would log http://www.example.com/some_page.html
self.logger.info("Visited %s", response.url)
为什么我的蜘蛛不能工作,除非添加 dont_filter=True ?我究竟做错了什么 ?我的蜘蛛在第一个示例中过滤了哪些重复链接?
附:我可以在上面发布的 QA 线程中解决这个问题,但除非我有 50 的声誉,否则我不允许发表评论(可怜的我!!)