2012-07-05 97 views
0

我遇到了Scrapy的問題,出於某種原因,它沒有進入我的解析方法,我不知道爲什麼會這樣。我嘗試過不同的選擇,但沒有成功。Scrapy沒有進入解析方法

這就是我的代碼現在的樣子。具體來說,有兩個打印語句,並且parse()方法中的一個未被調用。

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 
from scrapy import log 
from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 

from comments.items import CustomerReview 
import re 

class AppidSpider(BaseSpider): 

    name = "appid" 
    allowed_domains = ["itunes.apple.com"] 
    start_urls = [ 
     "http://itunes.apple.com/us/genre/ios/id36?mt=8" 
    ] 

    rules = [Rule(SgmlLinkExtractor(), follow=True, callback='parse')] 
    print "---> THIS IS TEST 1" 

    def parse(self, response): 
     print " ----> THIS IS TEST 2" 
     # ... More code afterwards 

而這是輸出。正如你可以看到測試2從不打印。

$ scrapy crawl appid 
2012-07-05 13:41:02+0000 [scrapy] INFO: Scrapy 0.14.4 started (bot: comments) 
2012-07-05 13:41:02+0000 [scrapy] DEBUG: Enabled extensions: LogStats, TelnetConsole, CloseSpider, WebService, CoreStats, MemoryUsage, SpiderState 
---> THIS IS TEST 1 
2012-07-05 13:41:02+0000 [scrapy] DEBUG: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, RedirectMiddleware, CookiesMiddleware, HttpCompressionMiddleware, ChunkedTransferMiddleware, DownloaderStats 
2012-07-05 13:41:02+0000 [scrapy] DEBUG: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware 
2012-07-05 13:41:02+0000 [scrapy] DEBUG: Enabled item pipelines: FilterWordsPipeline 
2012-07-05 13:41:02+0000 [appid] INFO: Spider opened 
2012-07-05 13:41:02+0000 [appid] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 
2012-07-05 13:41:02+0000 [scrapy] DEBUG: Telnet console listening on 0.0.0.0:6023 
2012-07-05 13:41:02+0000 [scrapy] DEBUG: Web service listening on 0.0.0.0:6080 
2012-07-05 13:41:02+0000 [appid] DEBUG: Crawled (200) <GET http://itunes.apple.com/us/genre/ios/id36?mt=8> (referer: None) 
2012-07-05 13:41:02+0000 [appid] INFO: Closing spider (finished) 
2012-07-05 13:41:02+0000 [appid] INFO: Dumping spider stats: 
     {'downloader/request_bytes': 222, 
     'downloader/request_count': 1, 
     'downloader/request_method_count/GET': 1, 
     'downloader/response_bytes': 9927, 
     'downloader/response_count': 1, 
     'downloader/response_status_count/200': 1, 
     'finish_reason': 'finished', 
     'finish_time': datetime.datetime(2012, 7, 5, 13, 41, 2, 694678), 
     'scheduler/memory_enqueued': 1, 
     'start_time': datetime.datetime(2012, 7, 5, 13, 41, 2, 604025)} 
2012-07-05 13:41:02+0000 [appid] INFO: Spider closed (finished) 
2012-07-05 13:41:02+0000 [scrapy] INFO: Dumping global stats: 
     {'memusage/max': 95318016, 'memusage/startup': 95318016} 
+2

如果您使用規則,您應該繼承CrawlSpider而不是BaseSpider,併爲解析方法選擇不同的名稱(不是'parse')。 – 2012-07-06 01:39:39

+0

謝謝,這可以解釋我現在面臨的第二個問題。 – 2012-07-06 18:33:26

回答

1

爲什麼你將parse作爲字符串傳遞?改爲嘗試callback=self.parse

+0

謝謝。當我把self.parse我得到錯誤 NameError:名稱'自我'未定義 這可能是相關的?也許有縮進或什麼問題? – 2012-07-05 14:18:43

+0

也許吧。摘錄的縮進根本沒有意義,我猜測調用和解析方法都屬於這個類。他們呢? – Creshal 2012-07-05 14:24:44

+0

好吧,一旦我問了那個問題,我試了一下。不知道它是什麼,但這是縮進問題。我重新縮進了整個腳本,現在它運行良好。看起來它最初對我來說雖然:) – 2012-07-05 14:25:09

2

正如Creshal所說,你在回調中需要使用一些調用方法,但不能解析你的一些其他自定義方法。

但在這種情況下,它不應該是問題,因爲您實際上沒有任何規則可遵循,所以它並不重要。

我試過你的代碼,它對我來說工作正常,它打印出兩條消息。

+0

分的幫助。這不是答案,但它讓我回答了這樣一個事實,即它適合你而不是我。 – 2012-07-05 14:24:16

相關問題