在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。有什么我想念的吗?
答案 0 :(得分:1)
这是因为在幕后Scrapy使用UserDict.DictMixin
mixin作为Item
类:
class UserDict.DictMixin
Mixin为已经拥有的类定义所有字典方法 最小字典界面,包括
__getitem__()
,__setitem__()
,__delitem__()
和keys()
。
此外,来自Scrapy的documentation的引用:
项目对象是用于收集已删除数据的简单容器。 它们提供了类似字典的API,并提供了方便的语法 宣布他们的可用领域。