鼠标放上会放大的CSS分页按钮样式
2014-07-08 10:20
507 查看
Items
项目类
爬虫的目的在于从非结构化的数据源中提取结构化的数据,例如这些网页就是非结构化的。 为了达到这样的目的,Scrapy 提供了类Item。
Item对象是用来收集抓取数据的简单容器。 他们提供了带有简单语法的 dictionary-like类字典接口来声明它们的有效区域。
Declaring Items
声明项目类
用一段简单的类定义语法和区块Field对象来声明Items。 下面是个例子:
from scrapy.item import Item, Fieldclass Product(Item): name = Field() price = Field() stock = Field() last_updated = Field(serializer=str)注意熟悉 Django的人可能会发现Scrapy 的Items声明类似 Django Models, 只不过Scrapy的 Items 更简单,它没有关于不同区域类型的定义。
Item Fields
Item 域
Field对象用来指定每个域的元数据。例如,在上面的例子中生命的的last_updated域的serializer函数。你可以为每个域指定任意的元数据。
Field对象接受的值类型没有限制。 出于同样的原因,没有全部可用元数据类型的参考列表。每个在
Field对象中定义的key都可以被别的部分所用,并且只有这些部分才知道这个key。你也可以根据需要在你的工程里定义和使用任何其他的
Fieldkey。The main goal of
Field对象的主要目的就是提供一种方法,使得所有的元数据都可以在一个地方定义。典型的, 那些行为依赖域的部分使用确定的 field keys来配置他们的行为。你必须参考他们的文档来了解元数据keys正被哪个部分所用。 有件很重要的事情你必须知道,那些用来声明item的域对象不像类属性一样是待分配的。作为替代,你可以通过
Item.fields的属性去访问他们。关于声明items的事情就讲到此为止。
Working with Items
使用Items
下面几个例子讲了使用items的普通任务,其中用的是上面声明的Productitem类 declared above. 你会发现 API很接近 dict API.
Creating items
创建items
>>> product = Product(name='Desktop PC', price=1000)>>> print productProduct(name='Desktop PC', price=1000)
Getting field values
获取域中的值
>>> product['name']Desktop PC>>> product.get('name')Desktop PC>>> product['price']1000>>> product['last_updated']Traceback (most recent call last): ...KeyError: 'last_updated'>>> product.get('last_updated', 'not set')not set>>> product['lala'] # 请求未知的域出错Traceback (most recent call last): ...KeyError: 'lala'>>> product.get('lala', 'unknown field')'unknown field'>>> 'name' in product # name 是否在product中?True>>> 'last_updated' in product # is last_updated populated?False>>> 'last_updated' in product.fields # is last_updated a declared field?True>>> 'lala' in product.fields # lala 是否是已声明的域?False
Setting field values
设置域中的值
>>> product['last_updated'] = 'today'>>> product['last_updated']today>>> product['lala'] = 'test' # setting unknown fieldTraceback (most recent call last): ...KeyError: 'Product does not support field: lala'
Accessing all populated values
访问所有已填入的值
要访问所有已填入的值,只需要访问经典的 dict API:>>> product.keys()['price', 'name']>>> product.items()[('price', 1000), ('name', 'Desktop PC')]
Other common tasks
其他的小任务
复制 items:>>> product2 = Product(product)>>> print product2Product(name='Desktop PC', price=1000)>>> product3 = product2.copy()>>> print product3Product(name='Desktop PC', price=1000)根据 items创建字典:
>>> dict(product) # create a dict from all populated values{'price': 1000, 'name': 'Desktop PC'}根据字典创建 items:
>>> Product({'name': 'Laptop PC', 'price': 1500})Product(price=1500, name='Laptop PC')>>> Product({'name': 'Laptop PC', 'lala': 1500}) # warning: unknown field in dictTraceback (most recent call last): ...KeyError: 'Product does not support field: lala'
Extending Items
扩展的Items
你可以通过在原始Item中声明子类来扩展 Items (增加更多的域 或者更改某些域的元数据)。例如:class DiscountedProduct(Product): discount_percent = Field(serializer=str) discount_expiration_date = Field()你也可以扩展域元数据,在先前的域元数据中增加更多的值或者修改已有的值,向下面这样:
class SpecificProduct(Product): name = Field(Product.fields['name'], serializer=my_serializer)给
name域添加(或替换)
serializer元数据键 , 保持原有元数据的值。
Item objects
Item 对象
classscrapy.item.
Item([arg])
返回一个使用给定参数初始化的新ItemItems 复制了标准的 dict API, 甚至包括了它的构造函数。 Items 只是附加了一个属性:
fields
字典包含了这个Item的所有已声明fields, 而不仅是已经在里面的那些. 键就是field的名字,值就是在Item declaration中使用的
Field对象.
Field objects
Field对象
classscrapy.item.
Field([arg])
Field类只是内建字典类的别名,它并不提供任何额外的功能和属性。换句话说,
Field对象就是一个普通的Python字典. 使用独立的类来支持基于类属性的项目声明语法( item declaration syntax )。
相关文章推荐
- CSS分页按钮样式代码-www.codesc.net
- CSS实现鼠标滑过按钮更改按钮样式
- OutLook样式类使用过程,弹出模式对话框时候,鼠标不能点击对话框按钮,的问题。
- 几个CSS按钮样式
- 几个css按钮样式
- css鼠标样式大全
- 用CSS改变鼠标样式
- CSS鼠标样式大全和鼠标指针代码 【来美化你的blog吧】
- 纯css实现的鼠标经过放大效果
- 模仿“百度”及 改变按钮、文本框样式(CSS)
- 用CSS改变鼠标样式
- 巧妙运用CSS立刻改变鼠标的样式
- 几个CSS按钮样式
- CSS实现的鼠标经过按钮的效果
- CSS里关于鼠标样式的一些属性
- css---分页样式
- 几个css按钮样式
- 一个很漂亮的按钮样式 纯css
- CSS分页样式(1)~!!
- css分页样式代码