爬虫蜘蛛项目加载器Item Loader类详解之使用项目加载器填充项目 (18)python SCRAPY最新教程1.51以上版本
项目加载程序提供了一种方便的机制来填充已删除的项目。尽管可以使用他们自己的类字典API来填充项目,但是项目加载器通过自动执行一些常见任务(例如在分配原始提取数据之前解析原始提取数据),提供了一种更方便的API,用于从抓取过程中填充它们。
换句话说,Items提供了抓取数据的容器,而Item Loaders提供了填充该容器的机制。
项目加载器旨在提供灵活,高效和简单的机制,用于通过蜘蛛或源格式(HTML,XML等)扩展和覆盖不同的字段解析规则,而不会成为维护的噩梦。
使用项目加载器填充项目
要使用Item Loader,必须先实例化它。您可以使用类似dict的对象(例如Item或dict)实例化它,也可以不使用一个,在这种情况下,Item使用ItemLoader.default_item_class
属性中指定的Item类在Item Loader构造函数中自动实例化。
然后,您开始将值集合到Item Loader中,通常使用 Selectors。您可以向同一项目字段添加多个值; Item Loader将知道如何使用适当的处理函数“加入”这些值。
下面是Spider中典型的Item Loader用法,使用Items章节中声明的Product项:
from scrapy.loader import ItemLoader
from myproject.items import Product
def parse(self, response):
l = ItemLoader(item=Product(), response=response)
l.add_xpath('name', '//div[@class="product_name"]')
l.add_xpath('name', '//div[@class="product_title"]')
l.add_xpath('price', '//p[@id="price"]')
l.add_css('stock', 'p#stock]')
l.add_value('last_updated', 'today') # you can also use literal values
return l.load_item()
通过快速查看该代码,我们可以看到该name
字段是从页面中的两个不同XPath位置提取的:
换句话说,通过使用该add_xpath()
方法从两个XPath位置提取数据来收集数据。这是稍后将分配给该name
字段的数据。
之后,类似的调用用于price
和stock
字段(后者使用CSS选择器和add_css()
方法),最后使用不同的方法last_update
直接用字面值(today
)填充字段:add_value()
。
最后,收集到的所有数据时,该ItemLoader.load_item()
方法被调用,实际上返回填充了先前提取并与收集到的数据的项目add_xpath()
, add_css()
和add_value()
调用。