优草派  >   Python

如何使用scrapy中的ItemLoader提取数据

黄佳欣            来源:优草派

Scrapy 是一个强大的 Python 爬虫框架。它不仅提供了许多方便的工具来爬取网站,还提供了 ItemLoader 工具来方便地从网页中提取数据。

如何使用scrapy中的ItemLoader提取数据

ItemLoader 是 Scrapy 提供的用来加载 Item 对象的工具。它相当于一个中间层,可以轻松地从网页中提取并整理需要的数据。

首先,需要在 Spider 中引入 ItemLoader,它的使用方法很简单:

from scrapy.loader import ItemLoader

from myproject.items import ArticleItem

然后,定义好需要提取的数据项及其对应的 CSS 选择器或者 XPath,添加到 ItemLoader 对象中:

class ArticleSpider(scrapy.Spider):

name = 'article'

start_urls = ['https://example.com/blog']

def parse(self, response):

loader = ItemLoader(item=ArticleItem(), response=response)

loader.add_css('title', 'h1::text')

loader.add_css('content', 'article > p')

loader.add_css('author', '.author::text')

return loader.load_item()

在 parse 方法中,首先构造 ItemLoader 对象并且指定要填充的 Item 类型。然后,通过 add_css 或者 add_xpath 方法,将需要提取的数据项与对应的 HTML 元素进行绑定。add_css 方法接受两个参数,第一个参数是要填充的属性名,第二个参数是 CSS 选择器。add_xpath 方法同理。

最后,调用 loader.load_item() 方法将提取后的数据填充到 Item 对象中,然后返回即可。在 Item 对象中,可以定义各种属性,用来存储从网页提取后的数据:

from scrapy import Item, Field

class ArticleItem(Item):

title = Field()

content = Field()

author = Field()

除了 add_css 和 add_xpath 方法,ItemLoader 还提供了一些其他的方法,可以进一步对提取的数据进行筛选、清理、容错处理等。比如,可以使用 default_output_processor 来设置输出格式。可以使用 MapCompose 来进行文本清理和转换。可以使用 Join 来将多个文本合并成一个文本。可以使用 TakeFirst 来取列表中的第一个值。

ItemLoader 的使用举例:

# 提取数字列表,只保留大于等于 0 的数字

loader.add_css('numbers', 'ul.numbers li::text', MapCompose(float), lambda x: x >= 0)

# 合并多个文本为一个文本,并使用字符串替换

loader.add_css('description', 'ul.description li::text', Join(' '), replace_entities)

除了 ItemLoader,Scrapy 还提供了其他许多方便的工具,可以让我们更加便捷地爬取数据。具体使用方法可以参考官方文档:https://docs.scrapy.org/en/latest/index.html

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行