2009-11-27 19 views
5

Este es el ejemplo BaseSpider desde el tutorial Scrapy:Scrapy BaseSpider: ¿Cómo funciona?

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

lo copié con los cambios de mi proyecto:

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

y me sale el error

[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 

lo haría en gran medida lo agradezco si los expertos aquí miran el código y me dan una pista sobre dónde me estoy equivocando.

Gracias

Respuesta

16

Probablemente usted significó item = FirmItem() en lugar de item = FirmItem?

+0

sí, lo arreglé, gracias – Zeynel

+2

tenga en cuenta que obtendrá el mismo error si utiliza ItemLoader (el elemento de parámetro es instancia de artículo pero no la clase de elemento) – eviltnan

+0

usted, sálvame de horas de depuración gracias. – javed