IT评测·应用市场-qidao123.com技术社区
标题:
Python爬虫系列教程之第十一篇:Scrapy框架实战
[打印本页]
作者:
守听
时间:
2025-2-25 00:00
标题:
Python爬虫系列教程之第十一篇:Scrapy框架实战
各人好,欢迎继承关注本系列爬虫教程!本篇博客将为各人介绍如何使用
Scrapy
框架构建一个高效、可扩展的爬虫项目。Scrapy 是一个功能强大的爬虫框架,它内置了许多精良的特性,如异步请求、内置中间件、Item 管道等,非常得当用于大规模数据采集和项目维护。
在本文中,我们将以抓取 Quotes to Scrape 网站为例,详细讲授如何从创建项目、定义数据结构、编写爬虫、数据洗濯到数据存储的全过程,并附上详细的代码及中文注释,资助你快速把握 Scrapy 的使用方法。
1. Scrapy框架简介
Scrapy 是一个开源的、基于 Python 的爬虫框架,主要特点包罗:
高性能
:基于异步 I/O 实现,可以或许高效抓取海量数据。
模块化筹划
:项目结构清晰,便于扩展和维护。
内置多种组件
:支持中间件、管道、调理器等,满足复杂爬虫项目的需求。
2. 环境准备与项目创建
2.1 安装Scrapy
首先,通过 pip 安装 Scrapy:
pip install scrapy
复制代码
2.2 创建Scrapy项目
在下令行中执行以下下令创建一个新的 Scrapy 项目(项目名称这里取为 myproject):
scrapy startproject myproject
复制代码
项目目录结构如下:
myproject/
│ scrapy.cfg
└───myproject/
│ __init__.py
│ items.py # 定义数据结构
│ middlewares.py
│ pipelines.py # 数据处理与存储
│ settings.py # 项目配置
└───spiders/
│ __init__.py
│ quotes_spider.py # 爬虫代码
复制代码
3. 编写Scrapy爬虫
3.1 定义数据结构(items.py)
在 myproject/items.py 中定义我们要抓取的数据结构,本例中抓取“名言”的文本、作者及标签:
import scrapy
class QuoteItem(scrapy.Item):
# 定义抓取的字段
text = scrapy.Field() # 名言文本
author = scrapy.Field() # 作者
tags = scrapy.Field() # 标签列表
复制代码
3.2 编写爬虫代码(spiders/quotes_spider.py)
在 myproject/spiders/quotes_spider.py 中编写爬虫代码,抓取 Quotes to Scrape 网站的内容:
import scrapy
from myproject.items import QuoteItem # 导入定义好的数据结构
class QuotesSpider(scrapy.Spider):
name = "quotes" # 定义爬虫名称,在运行时使用
allowed_domains = ["quotes.toscrape.com"] # 允许抓取的域名
start_urls = [
"http://quotes.toscrape.com/" # 初始请求的URL
]
def parse(self, response):
"""
解析网页内容,提取名言信息并处理翻页
"""
# 遍历页面中所有包含名言信息的块
for quote in response.css("div.quote"):
item = QuoteItem() # 创建一个数据项对象
# 提取名言文本,使用 CSS 选择器
item["text"] = quote.css("span.text::text").get()
# 提取作者信息
item["author"] = quote.css("small.author::text").get()
# 提取标签列表
item["tags"] = quote.css("div.tags a.tag::text").getall()
yield item # 生成数据项,交由管道处理
# 处理翻页,提取下一页链接
next_page = response.css("li.next a::attr(href)").get()
if next_page:
# 将相对URL转换为绝对URL
next_page = response.urljoin(next_page)
# 递归调用parse方法继续抓取下一页
yield scrapy.Request(url=next_page, callback=self.parse)
复制代码
4. 数据存储与Item Pipeline
为了将抓取的数据进行存储,我们可以使用 Scrapy 的 Item Pipeline。这里我们以将数据存储到 JSON 文件为例。
4.1 编写Pipeline(pipelines.py)
在 myproject/pipelines.py 中编写如下代码:
import json
class MyProjectPipeline:
def open_spider(self, spider):
"""
爬虫启动时调用,打开数据存储文件
"""
self.file = open("quotes.json", "w", encoding="utf-8")
def close_spider(self, spider):
"""
爬虫关闭时调用,关闭文件
"""
self.file.close()
def process_item(self, item, spider):
"""
处理每个数据项,将其写入JSON文件
"""
# 将Item转换为字典,并转换为JSON字符串
line = json.dumps(dict(item), ensure_ascii=False) + "\n"
self.file.write(line)
return item
复制代码
4.2 启用Pipeline
在 myproject/settings.py 中启用我们定义的 Pipeline,添加或修改如下配置:
ITEM_PIPELINES = {
'myproject.pipelines.MyProjectPipeline': 300,
}
复制代码
数字 300 表现该 Pipeline 的执行顺序,数字越小越先执行。
5. 运行爬虫
在项目根目录下打开下令行,执行以下下令启动爬虫:
scrapy crawl quotes
复制代码
运行成功后,爬虫会依次抓取 Quotes to Scrape 网站的全部页面,并将抓取的数据存储到项目根目录下的 quotes.json 文件中。你可以打开该文件检察抓取结果,每行代表一条 JSON 格式的名言数据。
6. 小结
在本篇博客中,我们介绍了如何使用 Scrapy 框架构建一个完备的爬虫项目,详细内容包罗:
项目创建
:使用 scrapy startproject 下令快速生成项目结构。
定义数据结构
:在 items.py 中定义抓取的数据字段。
编写爬虫
:在 spiders/quotes_spider.py 中编写爬虫代码,使用 CSS 选择器提取数据,并处置惩罚翻页逻辑。
数据存储
:通过自定义 Pipeline 将数据存储到 JSON 文件中,并在 settings.py 中启用 Pipeline。
运行爬虫
:使用 scrapy crawl 下令启动爬虫,完成数据抓取与存储。
Scrapy 强大的框架特性使得爬虫项目的开发、维护和扩展变得更加高效。盼望本篇博客能资助你快速上手 Scrapy,构建自己的高效爬虫项目。假如你有任何问题或建议,欢迎在评论区留言讨论!别忘了点赞、收藏并分享给需要的朋友,我们下篇博客再见!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/)
Powered by Discuz! X3.4