2011-03-10 1 views
6

Le code suivantPourquoi scrapy lance-t-il une erreur pour moi lorsque j'essaie d'explorer et d'analyser un site?

class SiteSpider(BaseSpider): 
    name = "some_site.com" 
    allowed_domains = ["some_site.com"] 
    start_urls = [ 
     "some_site.com/something/another/PRODUCT-CATEGORY1_10652_-1__85667", 
    ] 
    rules = (
     Rule(SgmlLinkExtractor(allow=('some_site.com/something/another/PRODUCT-CATEGORY_(.*)',))), 

     # Extract links matching 'item.php' and parse them with the spider's method parse_item 
     Rule(SgmlLinkExtractor(allow=('some_site.com/something/another/PRODUCT-DETAIL(.*)',)), callback="parse_item"), 
    ) 
    def parse_item(self, response): 
.... parse stuff 

Lancers l'erreur suivante

Traceback (most recent call last): 
    File "/usr/lib/python2.6/dist-packages/twisted/internet/base.py", line 1174, in mainLoop 
    self.runUntilCurrent() 
    File "/usr/lib/python2.6/dist-packages/twisted/internet/base.py", line 796, in runUntilCurrent 
    call.func(*call.args, **call.kw) 
    File "/usr/lib/python2.6/dist-packages/twisted/internet/defer.py", line 318, in callback 
    self._startRunCallbacks(result) 
    File "/usr/lib/python2.6/dist-packages/twisted/internet/defer.py", line 424, in _startRunCallbacks 
    self._runCallbacks() 
--- <exception caught here> --- 
    File "/usr/lib/python2.6/dist-packages/twisted/internet/defer.py", line 441, in _runCallbacks 
    self.result = callback(self.result, *args, **kw) 
    File "/usr/lib/pymodules/python2.6/scrapy/spider.py", line 62, in parse 
    raise NotImplementedError 
exceptions.NotImplementedError: 

Quand je change la fonction de rappel pour « analyser » et la fonction « analyser » je ne reçois pas d'erreurs, mais rien est gratté. Je l'ai changé en "parse_items" en pensant que je pourrais remplacer le parse method by accident. Peut-être que je suis en train de configurer l'extracteur de lien?

Ce que je veux faire est d'analyser chaque lien ITEM sur la page CATEGORY. Est-ce que je fais cela totalement faux?

+0

également: voir http://stackoverflow.com/questions/1811132/scrapy-sgmllinkextractor-is-ignoring-allowed-links – bdd

Répondre

9

J'avais besoin de changer BaseSpider en CrawlSpider. Merci les utilisateurs srapy!

http://groups.google.com/group/scrapy-users/browse_thread/thread/4adaba51f7bcd0af#

Salut Bob,

Peut-être pourrait fonctionner si vous changez de BaseSpider à CrawlSpider? Le BaseSpider semble pas mettre en œuvre la règle, voir:

http://doc.scrapy.org/topics/spiders.html?highlight=rule#scrapy.contr ...

-M

+0

cela ne fonctionne pas avec une version plus récente disponible dans python3 :( – comiventor

4

par des recherches par défaut Scrapy pour la fonction parse dans la classe. Ici, dans votre araignée, la fonction d'analyse est manquante. Au lieu d'analyser, vous avez donné parse_item. Le problème sera résolu si parse_item est remplacé par parse. Ou vous pouvez remplacer la méthode parse dans spider.py par celle de parse_item.

Questions connexes