使用 Scrapy 进行网络抓取

使用 Scrapy 进行网络抓取:Python 指南

在本教程中,我们将指导您如何开始使用 Scrapy for 网络抓取 并建立你的第一个爬取项目。

为什么使用 Scrapy?

Scrapy 快速、高效、高度可定制。对于必须抓取成百上千个页面的大型搜索项目,它尤其有用。该框架专为提高性能而设计,可同时处理 HTTP 请求和解析响应。

Scrapy 的替代品

如果你正在寻找 Scrapy 的替代品,我可以向你推荐 3 家业内顶级的网络搜刮服务提供商(别担心,我与其中任何一家都没有任何关系):

  1. Bright Data:拥有广泛代理网络和解决方案的领先工具。
  2. Oxylabs:利用可靠的代理和应用程序接口进行高级数据收集。
  3. Zyte:通过智能提取和支持进行用户友好型刮擦。

Scrapy 的主要功能

  • 内置支持处理请求: 让处理多个页面和链接变得简单。
  • 并发和异步 I/O 同时高效处理多个请求。
  • 支持 XPath 和 CSS 选择器 浏览 HTML 和提取数据的强大方法。
  • 强大的应用程序接口: 允许您定义数据的处理和存储方式。

先决条件

  • Python 基础知识: 了解 Python 基础知识是关键。
  • 安装 Scrapy 使用 pip install scrapy 开始。确保已安装 Python 3.6 以上版本。

Scrapy 入门

设置 Scrapy

要开始使用 Scrapy,你需要先安装它。最简单的方法是使用 Python 的软件包管理器 pip。

pip install scrapy

安装完成后,请输入以下命令验证安装:

scrapy version

如果 Scrapy 安装正确,该命令将返回 Scrapy 的版本号。

创建 Scrapy 项目

Scrapy 是围绕项目概念运行的。要创建第一个项目,请导航至项目所在目录并运行:

scrapy startproject myproject

这将创建一个名为 myproject 的文件夹,其中包含开始工作所需的所有基本文件。

了解项目结构

创建项目后,你会发现文件夹结构如下:

myproject/
scrapy.cfg # Configuration file
myproject/
__init__.py
items.py # Define the data structure
middlewares.py # Handle middleware logic
pipelines.py # Store the scraped data
settings.py # Project settings
spiders/ # Folder to store your spiders
  • items.py:定义要采集的数据结构。
  • middlewares.py:允许您修改请求和响应。
  • pipelines.py:处理并保存刮擦数据。
  • settings.py:配置 Scrapy 项目的行为。
  • spiders/:包含蜘蛛代码,所有刮擦逻辑都在这里。

书写你的第一只蜘蛛

蜘蛛是 Scrapy 中的一个类,它定义了如何刮擦一个或一组特定网站。

创建蜘蛛

要创建蜘蛛,请导航到 spiders 目录并创建一个新的 Python 文件。让我们将其命名为 quotes_spider.py,以便从著名的 quotes.toscrape.com 网站上抓取数据,这对初学者来说是个不错的选择。

下面是蜘蛛的基本结构:

import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = ['http://quotes.toscrape.com']
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()、
'tags': quote.css(div.tags a.tag::text).getall()、
}
next_page = response.css(li.next a::attr(href)).get()
if next_page is not None:
yield response.follow(next_page, self.parse)

让我们来分析一下:

  • name:这是蜘蛛的名称。Scrapy 使用此名称来识别要运行的蜘蛛。
  • start_urls:这是一个 URL 列表,蜘蛛将从该列表开始搜索。
  • 解析():该方法是提取逻辑所在。它定义了如何处理页面内容。在这里,我们使用 CSS 选择器(response.css)来提取引文的文本、作者和标记。
  • 分页:处理完当前页面后,蜘蛛会查找下一个页面的 URL,并跟随该 URL 搜索下一组引文。

奔跑的蜘蛛

要运行蜘蛛,只需使用以下命令:

scrapy crawl quotes

Scrapy 会访问起始 URL、提取数据、跟随链接进入下一页,并抓取更多引文。

导出抓取的数据

Scrapy 可以轻松导出刮擦数据。你可以用 JSON、CSV 或 XML 格式导出数据。要将数据导出为 JSON 文件,请使用此命令:

scrapy crawl quotes -o quotes.json

该命令会将刮擦数据保存为 quotes.json。同样,您也可以通过更改扩展名将其导出为 CSV 格式。

处理 Scrapy 设置

Scrapy 的行为可以通过 settings.py 文件进行配置。以下是你可能需要调整的一些重要设置:

  • 用户代理:有些网站会阻止没有用户代理的请求。您可以在设置中设置蜘蛛的用户代理。

USER_AGENT = 'myproject (+http://www.yourdomain.com)'

  • 并发请求:该设置定义 Scrapy 应同时发出多少个请求。

并发请求数 = 16

  • 下载延迟:您可以在请求之间使用延迟,以避免服务器不堪重负。

DOWNLOAD_DELAY = 1 # 1 秒请求间隔延迟

处理动态内容

许多现代网站使用 JavaScript 来动态加载内容,而 Scrapy 本身无法执行 JavaScript。在这种情况下,您可以使用 Scrapy-Splash 或将 Scrapy 与无头浏览器集成,如 Selenium.

使用 Scrapy-Splash

Splash 是一款无头浏览器,专为网络搜索而设计。要使用它,需要先安装,然后与 Scrapy 集成。

下面介绍如何安装 Scrapy-Splash:

pip install scrapy-splash

您还需要更新 settings.py 文件,使其包含

DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
Scrapy_splash.SplashMiddleware: 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}
spider_middlewares = {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
dupefilter_class = 'scrapy_splash.SplashAwareDupeFilter'
httpcache_storage = 'scrapy_splash.SplashAwareFSCacheStorage'(SplashAwareFSCache存储)。

通过集成 Splash,Scrapy 可以更好地处理动态内容,并从基于 JavaScript 的网站获取数据。

Scrapy 管道:存储数据

一旦采集到数据,就需要一种存储或处理数据的方法。这就是管道发挥作用的地方。

比方说,你想把搜刮到的数据存储到 MongoDB 数据库中。首先,安装 pymongo 库:

pip install pymongo

然后,在 pipelines.py 中创建一个管道:

import pymongo
class MongoPipeline:
def open_spider(self, spider):
self.client = pymongo.MongoClient("mongodb://localhost:27017/")
self.db = self.client["scrapy_db"]
def close_spider(self, spider):
self.client.close()
def process_item(self, item, spider):
self.db["quotes"].insert_one(dict(item))
return item
Don't forget to activate the pipeline in settings.py:
ITEM_PIPELINES = {
'myproject.pipelines.MongoPipeline': 300,
}

现在,所有刮擦数据都将存储在 MongoDB 集合中。

结论

使用 Scrapy 进行网络抓取是一种高效提取网站数据的强大方法。从设置 Scrapy、创建蜘蛛、处理动态内容到将数据存储到数据库,Scrapy 为初学者和有经验的开发者提供了灵活性。

掌握 Scrapy 可以使您的数据收集流程自动化,为您提供收集宝贵见解和推动行业决策的工具。

现在你已经了解 Scrapy 的工作原理,可以开始你的下一个网络搜索项目了!

类似文章