个人宽带备案网站,wordpress考试系统,国际贸易,网站大全2021目录 1 Scrapy 的简介
2 Scrapy选择器
3 快速创建Scrapy 爬虫
4 下载器与爬虫中间件
5 使用管道Pielines 1 Scrapy 的简介
Scrapy 是一个用于爬取网站数据并进行数据提取的开源网络爬虫框架。它使用 Python 编程语言编写#xff0c;并提供了一套强大的工具和库#xff0…目录 1 Scrapy 的简介
2 Scrapy选择器
3 快速创建Scrapy 爬虫
4 下载器与爬虫中间件
5 使用管道Pielines 1 Scrapy 的简介
Scrapy 是一个用于爬取网站数据并进行数据提取的开源网络爬虫框架。它使用 Python 编程语言编写并提供了一套强大的工具和库帮助用户在网页上浏览和抓取数据。Scrapy 旨在简化爬虫开发流程提供了高度可定制的机制来处理各种网站的数据抓取需求。
以下是 Scrapy 框架的一些主要特点和组件 请求和响应管理 Scrapy 提供了一个异步的请求和响应管理系统允许用户发出 HTTP 请求并处理返回的 HTML 或其他数据。 数据提取 Scrapy 使用基于 XPath 或 CSS 选择器的数据提取方法使用户能够方便地从网页中提取所需数据。 中间件 Scrapy 允许用户定义中间件来自定义请求和响应的处理过程例如修改请求头、处理代理等。 管道 管道是 Scrapy 中用于处理数据的组件您可以在管道中对抓取到的数据进行清洗、处理、存储等操作。 调度器 调度器负责管理请求的发送顺序以及处理并发请求的方式确保爬虫在合理的速率下访问网站。 自动限速 Scrapy 自带自动限速功能以避免对目标网站造成过多负担。 异步支持 Scrapy 支持异步处理能够高效地执行多个请求和处理操作。 扩展性 您可以根据需要编写扩展来定制 Scrapy 的行为如添加新的中间件、管道等。 命令行工具 Scrapy 提供了命令行工具方便用户创建、管理和运行爬虫。 文档丰富 Scrapy 提供详细的官方文档和教程使新用户能够快速入门并且为高级用户提供深入了解框架的资源。 总之Scrapy 是一个功能强大且高度可定制的网络爬虫框架适用于各种规模的数据抓取项目从简单的数据收集任务到复杂的数据挖掘和分析。无论您是初学者还是有经验的开发人员都可以利用 Scrapy 快速有效地构建和管理爬虫。
2 Scrapy选择器 Scrapy 提供了两种主要的选择器用于从网页中提取数据基于 XPath 的选择器和基于 CSS 的选择器。这两种选择器都能够让您轻松地从 HTML 或 XML 文档中定位和提取所需的数据。 基于 XPath 的选择器 XPathXML Path Language是一种用于在 XML 文档中定位元素的语言。在 Scrapy 中XPath 选择器允许您通过路径表达式来选择和提取数据。以下是一些常见的 XPath 表达式示例 选择元素//elementName选取所有名称为 elementName 的元素选择特定路径下的元素//parent/child选取 parent 元素下的所有 child 元素选择具有特定属性的元素//element[attributevalue]选取具有 attribute 属性且值为 value 的元素 基于 CSS 的选择器 CSSCascading Style Sheets选择器在网页设计中常用于样式设置但它们也可以用于从 HTML 文档中选择元素。Scrapy 中的 CSS 选择器允许您使用类似于 CSS 选择器的语法来定位和提取数据。以下是一些常见的 CSS 选择器示例 选择元素elementName选取所有名称为 elementName 的元素选择类.className选取所有具有 className 类的元素选择 ID#idName选取具有 idName ID 的元素选择路径下的元素parent child选取 parent 元素下的所有 child 元素 在 Scrapy 中您可以使用这些选择器来定位和提取网页中的数据。以下是使用 Scrapy 选择器的示例代码
from scrapy.selector import Selectorhtml_content
htmlbodydiv classcontainerh1Title/h1pParagraph 1/ppParagraph 2/p/div/body
/html
selector Selector(texthtml_content)# 使用 XPath 选择器提取数据
title selector.xpath(//h1/text()).get()
paragraphs selector.xpath(//p/text()).getall()# 使用 CSS 选择器提取数据
title selector.css(h1::text).get()
paragraphs selector.css(p::text).getall()无论您选择使用 XPath 还是 CSS 选择器Scrapy 都提供了方便的方法来从网页中提取所需的数据使数据抓取任务变得更加简单和高效。 3 快速创建Scrapy 爬虫 创建一个简单的 Scrapy 爬虫可以分为以下几个步骤。以下示例将引导您创建一个爬取名言的简单爬虫。
安装 Scrapy 首先您需要确保已经安装了 Python 和 Scrapy。如果尚未安装 Scrapy可以使用以下命令进行安装
pip install scrapy创建新的 Scrapy 项目 在命令行中导航到您希望创建项目的目录并运行以下命令来创建新的 Scrapy 项目
scrapy startproject quotes_spider这将在当前目录下创建一个名为 quotes_spider 的项目目录。
1创建爬虫 在项目目录下进入到 quotes_spider 目录并运行以下命令来创建一个爬虫
cd quotes_spider
scrapy genspider quotes quotes.toscrape.com这将创建一个名为 quotes 的爬虫它将从 quotes.toscrape.com 网站爬取数据。
2编辑爬虫代码 在 quotes_spider/spiders 目录下找到名为 quotes.py 的文件这是刚刚创建的爬虫文件。使用您喜欢的编辑器打开该文件并编辑 start_urls 和 parse 方法
import scrapyclass QuotesSpider(scrapy.Spider):name quotesstart_urls [http://quotes.toscrape.com/page/1/,]def parse(self, response):for quote in response.css(div.quote):yield {text: quote.css(span.text::text).get(),author: quote.css(span small::text).get(),}next_page response.css(li.next a::attr(href)).get()if next_page is not None:yield response.follow(next_page, self.parse)在这个示例爬虫中我们从名言网站爬取名言文本和作者信息。parse 方法负责从网页中提取数据并通过使用 response.follow 方法来跟踪下一页链接。
3运行爬虫 回到项目目录quotes_spider 目录并运行以下命令来运行爬虫
scrapy crawl quotes爬虫将开始访问起始 URL抓取数据并显示在终端上。 这是一个简单的 Scrapy 爬虫创建过程示例。实际上您可以根据需要定制爬虫的各个方面包括请求头、管道、中间件等。通过阅读 Scrapy 的官方文档您可以深入了解如何创建更复杂和定制的爬虫。 4 下载器与爬虫中间件 在 Scrapy 框架中下载器中间件和爬虫中间件是两种不同类型的中间件用于在请求/响应的处理流程中插入自定义的逻辑。它们分别位于请求的发送和响应的接收过程中允许您对网络请求和数据处理进行修改和控制。
下载器中间件Downloader Middleware 下载器中间件位于请求发送过程中负责对请求进行处理以及在响应返回之前的操作。这些中间件可以用于修改请求头、设置代理、处理cookies等。下载器中间件可以在全局范围或特定爬虫范围内进行配置。
一些常见的下载器中间件操作包括 修改请求头以模拟不同类型的浏览器请求。配置代理服务器用于隐藏爬虫的真实 IP 地址。处理 cookies以保持会话状态。对请求进行重试和错误处理。控制请求的并发性。 爬虫中间件Spider Middleware 爬虫中间件位于响应接收和数据处理过程中负责对响应和提取的数据进行处理。这些中间件可以用于修改爬取到的数据、处理异常、进行数据转换等。爬虫中间件可以在全局范围或特定爬虫范围内进行配置。 一些常见的爬虫中间件操作包括 对从网页中提取的数据进行预处理和清洗。自定义数据转换如日期格式化、文本处理等。处理异常如被封 IP 的处理策略。控制数据的流向和过滤。 配置中间件在 Scrapy 的 settings.py 文件中进行。您可以为每个中间件设置优先级以确定它们在处理流程中的顺序。更具体地说下载器中间件的优先级较高的将首先处理请求而爬虫中间件的优先级较高的将首先处理响应和提取的数据。
以下是一个简单的示例展示了如何配置下载器和爬虫中间件
# settings.pyDOWNLOADER_MIDDLEWARES {myproject.middlewares.MyDownloaderMiddleware: 543,
}SPIDER_MIDDLEWARES {myproject.middlewares.MySpiderMiddleware: 543,
}在上面的示例中myproject.middlewares.MyDownloaderMiddleware 和 myproject.middlewares.MySpiderMiddleware 分别是自定义的下载器和爬虫中间件。它们的优先级设置为 543。 通过使用下载器和爬虫中间件您可以在请求和响应的处理流程中插入自定义的逻辑实现更灵活、高效和符合您需求的爬虫。 5 使用管道Pielines 在 Scrapy 中管道Pipeline是用于处理爬虫抓取到的数据的组件。它允许您在数据从爬虫抓取到最终保存或处理的过程中进行多个操作如数据清洗、验证、存储到数据库、导出到文件等。Scrapy 的管道提供了一种灵活且可定制的方式来处理爬取的数据流。
以下是如何使用管道来处理爬取到的数据
(1)启用管道 在 Scrapy 的配置文件settings.py中您需要启用并配置管道。您可以在 ITEM_PIPELINES 设置中指定要使用的管道类及其优先级。优先级是一个整数值较小的值表示较高的优先级。
# settings.pyITEM_PIPELINES {myproject.pipelines.MyPipeline: 300,
}在上面的示例中myproject.pipelines.MyPipeline 是您自定义的管道类优先级被设置为 300。
(2)创建管道类 在项目中创建一个管道类该类将处理爬虫抓取到的数据。您需要实现一些方法来处理数据例如 process_item 方法。
# pipelines.pyclass MyPipeline:def process_item(self, item, spider):# 在这里处理数据可以进行清洗、验证、存储等操作return item在上面的示例中process_item 方法接收两个参数item 表示爬虫抓取到的数据项spider 表示当前爬虫实例。
(3)处理数据 在管道类的 process_item 方法中您可以对数据进行各种操作如数据清洗、格式化、验证等。您还可以将数据保存到数据库、导出到文件等。
以下是一个简单的示例展示了如何在管道中处理爬取到的数据并保存到 JSON 文件中
# pipelines.pyimport jsonclass MyPipeline:def open_spider(self, spider):self.file open(data.json, w)def close_spider(self, spider):self.file.close()def process_item(self, item, spider):data {text: item[text],author: item[author]}json.dump(data, self.file)self.file.write(\n)return item在上面的示例中open_spider 和 close_spider 方法在爬虫开始和结束时分别被调用打开和关闭数据文件。process_item 方法将数据提取并保存到 JSON 文件中。 通过配置和编写自定义的管道类您可以对爬取到的数据进行各种操作从而实现高度定制化的数据处理流程。