Python 爬虫进阶:使用 Scrapy 库进行数据提取和处理
在之前的基础教程中,我们介绍了如何使用 Scrapy 创建和运行一个简单的爬虫。在这篇文章中,我们将深入了解 Scrapy 的强大功能,学习如何高效地提取和处理数据。
一、环境准备与项目初始化
在使用 Scrapy 之前,请确保已安装 Python 环境(建议 3.6+)。通过 pip 安装 Scrapy 框架:
pip install scrapy
创建一个新的 Scrapy 项目:
scrapy startproject myproject
cd myproject
这将生成一个包含 myproject/settings.py、myproject/spiders/ 等目录的标准项目结构。
二、数据提取:Selectors 和 Item
在 Scrapy 中,提取数据主要通过 Selectors 来完成。Selectors 基于 XPath 或 CSS 表达式的查询语言来选取 HTML 文档中的元素。你可以在你的爬虫中使用 response 对象的 xpath 或 css 方法来创建一个 Selector 对象。
1. 使用 Selectors 提取数据
例如,我们可以修改我们的 QuotesSpider 爬虫,使用 Selectors 来提取每个引用的文本和作者:
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = [
'http://quotes.toscrape.com/page/1/',
]
def parse(self, response):
for quote in response.css('div.quote'):
# 使用 get() 获取第一个匹配项,getall() 获取所有匹配项列表
text = quote.css('span.text::text').get()
author = quote.css('span small::text').get()
print(f'Text: {text}, Author: {author}')
2. 定义 Item 类
此外,Scrapy 还提供了 Item 类,可以定义你想要收集的数据结构。Item 类非常适合收集结构化数据,如我们从 quotes.toscrape.com 中获取的引用:
import scrapy
class QuoteItem(scrapy.Item):
text = scrapy.Field()
author = scrapy.Field()
然后我们可以修改 QuotesSpider 爬虫,使其生成和收集 QuoteItem 对象:


