2009-11-27 12 views
5

Bu scrapy öğreticisindeki BaseSpider örnektir:Scrapy BaseSpider: Nasıl çalışır?

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

Projem için değişiklikleri ile kopyalanan:

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

ve ben

[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 

ben büyük ölçüde olur hatayı olsun Uzmanların kodlara bir göz atıp bana yanlış gittiğim yer hakkında bir ipucu vermesi durumunda bunu takdir et.

Eğer

cevap

16

Muhtemelen item = FirmItem() yerine item = FirmItem geliyordu ederiz?

+0

evet, ben sabit, teşekkürler – Zeynel

+2

Eğer ItemLoader (parametre öğe Öğe örneğidir ama Öğe sınıfı değil) – eviltnan

+0

kullanıyorsanız, hata ayıklama saatlerinden kurtarırsanız, aynı hatayı alacağınızı unutmayın. – javed