2011-12-05 116 views
4

我試圖爬在一個非常基本的方式網站的頁面。但Scrapy無法檢索的所有鏈接。我將解釋該方案如下 -Scrapy不是爬行

main_page.html - >包含鏈接到a_page.html,b_page.html,c_page.html
a_page.html - >包含鏈接到a1_page.html,a2_page.html
b_page.html - >包含鏈接到b1_page.html,b2_page.html
c_page.html - >包含鏈接到c1_page.html,c2_page.html
a1_page.html - >包含鏈接b_page.html
a2_page.html - >包含鏈接c_page.html
b1_page.html - >包含鏈接a_page.html
b2_page.html - >包含鏈接c_page.html
c1_page.html - >包含鏈接a_page.html
c2_page.html - >包含鏈接main_page.html

我使用CrawlSpider以下規則 -

Rule(SgmlLinkExtractor(allow =()), callback = 'parse_item', follow = True))

但抓取結果如下 -

DEBUG:爬(200)的http://localhost/main_page.html>(引薦: 無)2011-12-05 09:56:07 + 05 30 [test_spider] DEBUG:Crawled(200)http://localhost/a_page.html>(引用者: http://localhost/main_page.html)2011-12-05 09:56:07 + 0530 [test_spider] DEBUG:Crawled(200)http: //localhost/a1_page.html> (referer:http://localhost/a_page.html)2011-12-05 09:56:07 + 0530 [test_spider] DEBUG:Crawled(200)http://localhost/b_page.html> (referer: (調用者:http://localhost/b_page.html)2011-12-05 09:56:07 +0530 [test_spider]信息:關閉蜘蛛(已完成)

這不是爬行所有頁面。

注意 - 我已經在Scrapy文檔中指明瞭BFO的抓取。

我錯過了什麼?

回答

3

我今天也有類似的問題,雖然我使用的是自定義的蜘蛛。 原來,該網站是限制我的抓取,因爲我的useragent是scrappy機器人

嘗試更改您的用戶代理,然後再試一次。改變它也許是一個已知的瀏覽器

你可能想嘗試的另一件事是增加一個延遲。某些網站會阻止刮如果請求之間的時間太少。嘗試加入的2 DOWNLOAD_DELAY,看看是否能在 http://doc.scrapy.org/en/0.14/topics/settings.html

+0

謝謝。我正在嘗試添加下載延遲。但我作爲一個例子的網站是在本地主機上運行的,只包含簡單的鏈接。 – Siddharth

+0

沒有沒有工作。在scrapy打印的統計信息中,我收到了類似這樣的內容。 'request_depth_max':5, – Siddharth

+0

你可能會使用DepthMiddleware http://readthedocs.org/docs/scrapy/en/latest/topics/spider-middleware.html 看DepthMiddleware部分 – CodeMonkeyB

5

Scrapy幫助約DOWNLOAD_DELAY

更多信息將默認過濾掉所有的重複請求。

可以通過使用(例如)繞過此:

yield Request(url="test.com", callback=self.callback, dont_filter = True) 

dont_filter(布爾值) - 表明這個請求不應 由調度器進行過濾。當您想要多次執行相同的請求時,會使用此選項來忽略重複過濾器。小心使用 ,否則您將進入爬行循環。默認爲False。

另見Request object documentation

+0

是的,我讀過。但是,你會發現這不是問題。問題在於它沒有抓取所有的頁面,也沒有重複的問題。不過,謝謝你的回答。我還在尋找重複問題。 – Siddharth

+0

如果我不用某種形式的網絡對它進行可視化,就很難理解它所走的路徑:-D--但是我仍然有一種感覺,它在某個點上過濾掉了一個重複的頁面。我仍然會嘗試dont_filter選項,只是爲了確保...我想不到任何其他原因[沒有看到源html/spider],它不會刮掉剩餘的頁面。 –

+0

是的,我曾嘗試使用dont_filter選項False,但它也不是那樣工作。 – Siddharth

0

也許很多的網址是重複的。由於效率低下,Scrapy避免重複。從我使用遵循URL規則的解釋中可以看到,當然有很多重複。

如果您想確定並查看日誌中的證明,請將其添加到您的settings.py

DUPEFILTER_DEBUG = True 

,你會看到這種線的日誌中:

2016年9月20日17時08分47秒[scrapy] DEBUG:過濾重複的請求:HTTP:// WWW .example.org/example.html>