這是少了一個「我該如何使用這些?還有更多的「何時/爲什麼我會使用這些?」類型問題。Scrapy:CrawlSpider規則process_links vs process_request vs下載中間件
編輯:這個問題是一個近似重複的this question,這表明使用下載中間件來過濾這樣的請求。更新了我的問題以反映這一點。
在Scrapy CrawlSpider documentation中,規則接受兩個可調用對象process_links
和process_request
(以下引用的文檔以便於參考)。
默認情況下,Scrapy正在過濾重複的URL,但我希望對請求進行額外的過濾,因爲我得到的複製頁面有多個不同的鏈接到它們的URL。之類的東西,
URL1 = "http://example.com/somePage.php?id=XYZ&otherParam=fluffyKittens"
URL2 = "http://example.com/somePage.php?id=XYZ&otherParam=scruffyPuppies"
然而,這些網址會在查詢字符串類似的元素 - 上面顯示這是id
。
我在想,使用我的蜘蛛的process_links
可調用過濾出重複的請求是有意義的。
問題:
- 是有一些原因
process_request
會更好套件,這個任務? - 如果不是,您能提供一個
process_request
更適用的例子嗎? - 下載中間件是否比
process_links
或process_request
更合適?如果是這樣,你可以提供一個例子,當process_links
或process_request
將是一個更好的解決方案?
文檔引用:
process_links是一個可調用的,或一個字符串(在這種情況下,將用於從 的方法具有該名稱的蜘蛛對象),將針對每個被稱爲 使用 指定的link_extractor從每個響應中提取的鏈接列表。這主要用於過濾目的。
process_request是一個可調用的,或一個字符串(在這種情況下,從具有該名稱的蜘蛛對象的方法 將被使用),其將被稱爲與這個規則提取的每個請求 ,並且必須返回一個 請求或無(用於過濾請求)。
謝謝你的描述性答案,非常感謝! – CatShoes