下面是一個簡單scrapy蜘蛛如何在scrapy.Request中添加dont_filter = True參數使我的解析方法起作用?
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。然後我在下面的線程中找到了這個解決方案。
Why is my second request not getting called in the parse method of my scrapy spider
它只是我需要添加dont_filter =真在請求方法的參數,使parse2功能工作。
yield scrapy.Request(self.start_urls[0],callback=self.parse2,dont_filter=True)
但在scrapy文檔和很多在YouTube上的教程中給出的例子,他們從來沒有使用過dont_filter = True參數在scrapy.Request方法仍然是他們的第二解析功能的工作原理。
看看這個
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 =真被添加?我究竟做錯了什麼 ?我的蜘蛛在第一個例子中過濾的重複鏈接是什麼?
P.S.我可以在我上面發佈的QA線程中解決這個問題,但是我不允許發表評論,除非我有50個聲望(可憐我!!)
你有兩次下載同一頁面的原因嗎?Scrapy會過濾您的請求,因此您不會最終抓取相同的頁面,'dont_filter'完全意味着忽略此過濾器。 – Granitosaurus
與你的問題沒有關係,但可能很快就會咬你:'allowed_domains'應該列出域名,而不是URL,所以它應該是'allowed_domains = [「dmoz.org」]' –