我正在使用scrapy runspider命令在同一個域中以相同的結構刮取一組〜10,000個鏈接。隨機在一些頁面之間(大約40%到50%的頁面)被抓取,但沒有被抓取,因爲在我的分析方法中,我評估頁面中的特定元素,基於此我刮掉頁面的其他元素。但是,當它出於某種原因(稍後更多關於此原因)時,對於某些元素而言,該元素的評估不正確。爲了解決這個問題,我想重複調用我的這些url的解析方法,最多5次,直到它正確評估(希望在5次運行中,頁面將正確地響應該條件,否則我假定該元素是真正評估的作爲錯誤)。如何編碼(下面的部分代碼)?Scrapy爬行但不刮刮
上述行爲的可能原因:我的網站鏈接的類型爲 www.example.com/search_term/,它們是在www.example.com中輸入「search_term」後實際動態生成的頁面。所以我的猜測是,在幾種情況下,即使在完全生成www.example.com/search_term/頁面之前,Scrapy也能獲得響應。也許理想的解決方案是使用一個webdriver和所有的,但在這個階段對我來說這些都太複雜了。只要我得到95%的拼搶,我很高興。
下面相關代碼(消毒的可讀性不留出任何細節):
class mySpider(scrapy.Spider):
name = "spidername"
def start_requests(self):
urls = [url1, ... url10000]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse,headers={
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3"})
def parse(self, response):
if (value of particular_item in page == 10):
yield {'someitem':
response.xpath('/html/body/div').extract())}
else:
<<Once again call this parse fuction with the same url upto a maximum of 5 times - Need help in writing the code here>>
網站基本上是像搜索各種可能的查詢結果列表: – Scyber
...(抱歉,上面完成查詢)... ...可能的查詢如: www.exapmle.com/abcd/ www.exapmle.com/shjk/ www.exapmle.com/dued/ 因此具有相同的結構。刮取其他60%頁面的成功進一步證明xpaths是正確的。同時也有不同的運行不同的鏈接錯過了,不一定是相同的。所以有時www.exapmle.com/shjk/可能會錯過,有時可能會被刮掉。 – Scyber
在這種情況下,嘗試將「響應」記錄到日誌文件中,以查看您獲得的結果與預期相同。這可能是因爲服務器限制了請求數量,並且您會收到錯誤消息而不是搜索結果。 – GHajba