Python爬虫系列教程之第十一篇:Scrapy框架实战

打印 上一主题 下一主题

主题 871|帖子 871|积分 2613

各人好,欢迎继承关注本系列爬虫教程!本篇博客将为各人介绍如何使用 Scrapy 框架构建一个高效、可扩展的爬虫项目。Scrapy 是一个功能强大的爬虫框架,它内置了许多精良的特性,如异步请求、内置中间件、Item 管道等,非常得当用于大规模数据采集和项目维护。
在本文中,我们将以抓取 Quotes to Scrape 网站为例,详细讲授如何从创建项目、定义数据结构、编写爬虫、数据洗濯到数据存储的全过程,并附上详细的代码及中文注释,资助你快速把握 Scrapy 的使用方法。

1. Scrapy框架简介

Scrapy 是一个开源的、基于 Python 的爬虫框架,主要特点包罗:


  • 高性能:基于异步 I/O 实现,可以或许高效抓取海量数据。
  • 模块化筹划:项目结构清晰,便于扩展和维护。
  • 内置多种组件:支持中间件、管道、调理器等,满足复杂爬虫项目的需求。

2. 环境准备与项目创建

2.1 安装Scrapy

首先,通过 pip 安装 Scrapy:
  1. pip install scrapy
复制代码
2.2 创建Scrapy项目

在下令行中执行以下下令创建一个新的 Scrapy 项目(项目名称这里取为 myproject):
  1. scrapy startproject myproject
复制代码
项目目录结构如下:
  1. myproject/
  2. │   scrapy.cfg
  3. └───myproject/
  4.     │   __init__.py
  5.     │   items.py       # 定义数据结构
  6.     │   middlewares.py
  7.     │   pipelines.py   # 数据处理与存储
  8.     │   settings.py    # 项目配置
  9.     └───spiders/
  10.         │   __init__.py
  11.         │   quotes_spider.py  # 爬虫代码
复制代码

3. 编写Scrapy爬虫

3.1 定义数据结构(items.py)

在 myproject/items.py 中定义我们要抓取的数据结构,本例中抓取“名言”的文本、作者及标签:
  1. import scrapy
  2. class QuoteItem(scrapy.Item):
  3.     # 定义抓取的字段
  4.     text = scrapy.Field()    # 名言文本
  5.     author = scrapy.Field()  # 作者
  6.     tags = scrapy.Field()    # 标签列表
复制代码
3.2 编写爬虫代码(spiders/quotes_spider.py)

在 myproject/spiders/quotes_spider.py 中编写爬虫代码,抓取 Quotes to Scrape 网站的内容:
  1. import scrapy
  2. from myproject.items import QuoteItem  # 导入定义好的数据结构
  3. class QuotesSpider(scrapy.Spider):
  4.     name = "quotes"  # 定义爬虫名称,在运行时使用
  5.     allowed_domains = ["quotes.toscrape.com"]  # 允许抓取的域名
  6.     start_urls = [
  7.         "http://quotes.toscrape.com/"  # 初始请求的URL
  8.     ]
  9.     def parse(self, response):
  10.         """
  11.         解析网页内容,提取名言信息并处理翻页
  12.         """
  13.         # 遍历页面中所有包含名言信息的块
  14.         for quote in response.css("div.quote"):
  15.             item = QuoteItem()  # 创建一个数据项对象
  16.             # 提取名言文本,使用 CSS 选择器
  17.             item["text"] = quote.css("span.text::text").get()
  18.             # 提取作者信息
  19.             item["author"] = quote.css("small.author::text").get()
  20.             # 提取标签列表
  21.             item["tags"] = quote.css("div.tags a.tag::text").getall()
  22.             yield item  # 生成数据项,交由管道处理
  23.         # 处理翻页,提取下一页链接
  24.         next_page = response.css("li.next a::attr(href)").get()
  25.         if next_page:
  26.             # 将相对URL转换为绝对URL
  27.             next_page = response.urljoin(next_page)
  28.             # 递归调用parse方法继续抓取下一页
  29.             yield scrapy.Request(url=next_page, callback=self.parse)
复制代码

4. 数据存储与Item Pipeline

为了将抓取的数据进行存储,我们可以使用 Scrapy 的 Item Pipeline。这里我们以将数据存储到 JSON 文件为例。
4.1 编写Pipeline(pipelines.py)

在 myproject/pipelines.py 中编写如下代码:
  1. import json
  2. class MyProjectPipeline:
  3.     def open_spider(self, spider):
  4.         """
  5.         爬虫启动时调用,打开数据存储文件
  6.         """
  7.         self.file = open("quotes.json", "w", encoding="utf-8")
  8.     def close_spider(self, spider):
  9.         """
  10.         爬虫关闭时调用,关闭文件
  11.         """
  12.         self.file.close()
  13.     def process_item(self, item, spider):
  14.         """
  15.         处理每个数据项,将其写入JSON文件
  16.         """
  17.         # 将Item转换为字典,并转换为JSON字符串
  18.         line = json.dumps(dict(item), ensure_ascii=False) + "\n"
  19.         self.file.write(line)
  20.         return item
复制代码
4.2 启用Pipeline

在 myproject/settings.py 中启用我们定义的 Pipeline,添加或修改如下配置:
  1. ITEM_PIPELINES = {
  2.     'myproject.pipelines.MyProjectPipeline': 300,
  3. }
复制代码
数字 300 表现该 Pipeline 的执行顺序,数字越小越先执行。

5. 运行爬虫

在项目根目录下打开下令行,执行以下下令启动爬虫:
  1. 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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

守听

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表