2014-07-23 2 views
1

На учебном сайте Scrapy у них есть этот код для элемента.Python и Scrapy, ссылающиеся на атрибуты предмета

import scrapy 

class DmozItem(scrapy.Item): 
    title = scrapy.Field() 
    link = scrapy.Field() 
    desc = scrapy.Field() 

тогда у них есть этот код для паука.

import scrapy 

from tutorial.items import DmozItem 

class DmozSpider(scrapy.Spider): 
    name = "dmoz" 
    allowed_domains = ["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): 
     for sel in response.xpath('//ul/li'): 
      item = DmozItem() 
      item['title'] = sel.xpath('a/text()').extract() 
      item['link'] = sel.xpath('a/@href').extract() 
      item['desc'] = sel.xpath('text()').extract() 
      yield item 

Мой вопрос: почему они могут ссылаться на заголовок элемента с помощью скобок []? Я думал, когда вы ссылаетесь на переменную, это будет item.title = whatever. Есть что-то, что мне не хватает?

ответ

1

Это происходит потому, что под капотом Scrapy использует UserDict.DictMixin подмешать для Item класса:

class UserDict.DictMixin

Mixin, определяющий все словарные методы классов, которые уже имеют минимальный интерфейс словаря, включая __getitem__(), __setitem__(), __delitem__(), и keys().

Кроме того, цитата из Scrapy-х documentation:

объекты Предмет простые контейнеры, используемые для сбора Царапины данных. Они предоставляют словарь-подобный API с удобным синтаксисом для , объявляя свои доступные поля.

Также см. the actual implementation.

Смежные вопросы