2013-11-26 63 views
0

我想寫一個Scrapy的小型網絡爬蟲。在Scrapy上循環doens't正常工作

我寫了一個抓取器,抓取特定頁面上某些鏈接的URL,並將這些鏈接寫入一個csv文件。然後,我編寫了另一個爬行器,在這些鏈接上進行循環,並從指向這些鏈接的頁面下載一些信息。

上的鏈接的循環:

cr = csv.reader(open("linksToCrawl.csv","rb")) 
start_urls = [] 
for row in cr: 
    start_urls.append("http://www.zap.co.il/rate"+''.join(row[0])[1:len(''.join(row[0]))]) 

如果,例如,我從檢索信息的網頁的URL是:

http://www.zap.co.il/ratemodel.aspx?modelid=835959

那麼更多的信息(有時)可從以下頁面中檢索,如:

http://www.zap.co.il/ratemodel.aspx?modelid=835959&pageinfo=2 (「& page信息= 2「被添加)。

因此,我的規則是:

rules = (Rule (SgmlLinkExtractor (allow = ("&pageinfo=\d", 
    ), restrict_xpaths=('//a[@class="NumBtn"]',)) 
    , callback="parse_items", follow= True),) 

這似乎是工作的罰款。但是,似乎檢索器只能從檢索具有擴展URL的頁面(「& pageinfo = \ d」),而不是沒有它們的頁面。我該如何解決這個問題?

謝謝!

回答

2

可以在CrawlSpider覆蓋parse_start_url()方法:

class MySpider(CrawlSpider): 

    def parse_items(self, response): 
     # put your code here 
     ... 

    parse_start_url = parse_items 
+0

謝謝@kev - 它的工作原理!雖然我不明白爲什麼;) – Cheshie

0

你的規則允許使用URL 「& pageinfo = \ d」。實際上,只有具有匹配網址的網頁纔會處理。您需要更改不包含pageinfo的url的allow參數才能處理。

+0

謝謝@Biswanath。你說的話是有道理的,但是我根據本教程寫了我的代碼:[link](http://mherman.org/blog/2012/11/08/recursively-scraping-web-pages-with-scrapy/)和在那裏似乎他有同樣的問題(「允許」規則似乎不匹配第一個URL),但不知何故它在他的項目中工作... – Cheshie