您的位置:首页 > Web前端 > CSS

鼠标放上会放大的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。你也可以根据需要在你的工程里定义和使用任何其他的
Field
key。The main goal of
Field
对象的主要目的就是提供一种方法,使得所有的元数据都可以在一个地方定义。典型的, 那些行为依赖域的部分使用确定的 field keys来配置他们的行为。你必须参考他们的文档来了解元数据keys正被哪个部分所用。 有件很重要的事情你必须知道,那些用来声明item的域对象不像类属性一样是待分配的。作为替代,你可以通过
Item.fields
的属性去访问他们。关于声明items的事情就讲到此为止。

Working with Items

使用Items

下面几个例子讲了使用items的普通任务,其中用的是上面声明的
Product
item类 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 对象

class
scrapy.item.
Item
([arg])

返回一个使用给定参数初始化的新ItemItems 复制了标准的 dict API, 甚至包括了它的构造函数。 Items 只是附加了一个属性:
fields


字典包含了这个Item的所有已声明fields, 而不仅是已经在里面的那些. 键就是field的名字,值就是在Item declaration中使用的
Field
对象.

Field objects

Field对象

class
scrapy.item.
Field
([arg])

Field
类只是内建字典类的别名,它并不提供任何额外的功能和属性。换句话说,
Field
对象就是一个普通的Python字典. 使用独立的类来支持基于类属性的项目声明语法( item declaration syntax )。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: