2009-11-27 11 views
5

Dies ist das BaseSpider Beispiel aus dem Scrapy Tutorial:Scrapy BaseSpider: Wie funktioniert es?

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() 

ich es mit Änderungen für mein Projekt kopiert:

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()  

und erhalte ich die Fehler

[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 

würde ich stark schätze es, wenn Experten hier einen Blick auf den Code werfen und mir einen Hinweis geben, wo ich falsch liege.

Danke

Antwort

16

Wahrscheinlich bedeutete Sie item = FirmItem() statt item = FirmItem?

+0

ja, ich behoben, danke – Zeynel

+2

beachten Sie, dass Sie den gleichen Fehler erhalten, wenn Sie ItemLoader verwenden (Parameter Element ist Item-Instanz, aber nicht die Klasse Item) – eviltnan

+0

Sie, rette mich von Stunden des Debuggen Dank .. – javed