Scrapy没有进入解析方法

问题描述:

我遇到了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

为什么你将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

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

但在这种情况下,它不应该是问题,因为您实际上没有任何规则可遵循,所以它并不重要。

我试过你的代码,它对我来说工作正常,它打印出两条消息。

+0

分的帮助。这不是答案,但它让我回答了这样一个事实,即它适合你而不是我。 – 2012-07-05 14:24:16