2016-01-29 174 views
0

好的,所以我正在研究一個基於scrapy的web爬蟲,它具有一些簡單的功能。機器人應該從一頁頁到另一頁,解析然後下載。我已經得到解析器的工作,我已經得到了下載工作。我無法抓取抓取工作。我已閱讀Spider類的文檔,我已閱讀關於解析應如何工作的文檔。我嘗試過迴歸vs屈服,而我依然無處可尋。我不知道我的代碼出錯了。從我寫的一個調試腳本看來,似乎發生了以下情況。代碼將運行,它會抓住頁面1,它會得到第二頁的鏈接,它將轉到第二頁,然後它將愉快地停留在第二頁上,而不是抓住第三頁。我不知道我的代碼中的錯誤在哪裏,或者如何修改它來修復它。所以任何幫助,將不勝感激。我確定這個錯誤是基本的,但我無法弄清楚發生了什麼。Scrapy webcrawler陷入無限循環,儘管最初工作。

import scrapy 

class ParadiseSpider(scrapy.Spider): 
    name = "testcrawl2" 
    start_urls = [ 
     "http://forums.somethingawful.com/showthread.php?threadid=3755369&pagenumber=1", 
     ] 
    def __init__(self): 
     self.found = 0 
     self.goto = "no" 

    def parse(self, response): 
     urlthing = response.xpath("//a[@title='Next page']").extract() 
     urlthing = urlthing.pop() 
     newurl = urlthing.split() 
     print newurl 
     url = newurl[1] 
     url = url.replace("href=", "") 
     url = url.replace('"', "") 
     url = "http://forums.somethingawful.com/" + url 
     print url 
     self.goto = url 
     return scrapy.Request(self.goto, callback=self.parse_save, dont_filter = True) 


    def parse_save(self, response): 
     nfound = str(self.found) 
     print "Testing" + nfound 
     self.found = self.found + 1 
     return scrapy.Request(self.goto, callback=self.parse, dont_filter = True) 
+0

請勿使用spider屬性通過回調傳遞變量。使用'request.meta'來傳遞值。 – Rolando

回答

3

使用Scrapy規則引擎,所以不需要寫下一頁爬行解析function.Just代碼傳遞的XPath在restrict_xpaths下一個頁面,並解析功能將得到爬網的響應頁面

rules=(Rule(LinkExtractor(restrict_xpaths= ['//a[contains(text(),"Next")]']),follow=True'),) 

    def parse(self,response): 
     response.url 
+0

所以我在類中添加了這個,但在任何defs之前,並刪除了我在def解析中編寫的解析器函數? – TheCog

+0

@TheCog見http://doc.scrapy.org/en/latest/topics/spiders.html#crawlspider-example – Rolando

+0

在解析函數中,編寫代碼下載鏈接@ TheCog –