Python和Scrapy引用项的属性

时间:2014-07-23 18:53:25

标签: python variables web-scraping scrapy

在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 = what。有什么我想念的吗?

1 个答案:

答案 0 :(得分:1)

这是因为在幕后Scrapy使用UserDict.DictMixin mixin作为Item类:

  

class UserDict.DictMixin

     

Mixin为已经拥有的类定义所有字典方法   最小字典界面,包括__getitem__()__setitem__(),   __delitem__()keys()

此外,来自Scrapy的documentation的引用:

  

项目对象是用于收集已删除数据的简单容器。   它们提供了类似字典的API,并提供了方便的语法   宣布他们的可用领域。

另见the actual implementation