2009-11-27 5 views
5

Ceci est l'exemple BaseSpider du tutoriel Scrapy:Scrapy BaseSpider: Comment ça marche?

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 

from dmoz.items import DmozItem 

class DmozSpider(BaseSpider): 
    domain_name = "dmoz.org" 
    start_urls = [ 
     "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", 
     "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/" 
    ] 

    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     sites = hxs.select('//ul[2]/li') 
     items = [] 
     for site in sites: 
      item = DmozItem() 
      item['title'] = site.select('a/text()').extract() 
      item['link'] = site.select('a/@href').extract() 
      item['desc'] = site.select('text()').extract() 
      items.append(item) 
     return items 

SPIDER = DmozSpider() 

Je l'ai copié avec des changements pour mon projet:

from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.selector import HtmlXPathSelector 
from scrapy.item import Item 
from firm.items import FirmItem 

class Spider1(CrawlSpider): 
    domain_name = 'wc2' 
    start_urls = ['http://www.whitecase.com/Attorneys/List.aspx?LastName=A'] 

    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     sites = hxs.select('//td[@class="altRow"][1]/a/@href').re('/.a\w+') 
     items = [] 
     for site in sites: 
      item = FirmItem 
      item['school'] = hxs.select('//td[@class="mainColumnTDa"]').re('(JD)(.*?)(\d+)') 
      items.append(item) 
     return items 

SPIDER = Spider1()  

et je reçois l'erreur

[wc2] ERROR: Spider exception caught while processing 
<http://www.whitecase.com/Attorneys/List.aspx?LastName=A> (referer: <None>): 
[Failure instance: Traceback: <type 'exceptions.TypeError'>: 
'ItemMeta' object does not support item assignment 

Je serais très apprécie si les experts ici jettent un coup d'oeil sur le code et me donnent une idée de où je vais mal.

Merci

Répondre

16

Probablement que vous vouliez dire item = FirmItem() au lieu de item = FirmItem?

+0

oui, j'ai corrigé, merci – Zeynel

+2

notez que vous aurez la même erreur si vous utilisez ItemLoader (le paramètre est Item instance mais pas la classe Item) – eviltnan

+0

vous, sauvez-moi des heures de débogage merci .. – javed