Scrapy,一个快速高效的爬虫框架,抓取全网数据!

文摘   2024-11-13 17:13   广东  


大家好,我是“橙子”。今天我们来聊聊 Scrapy,这个被广泛使用的 Python 爬虫框架。如果你对 网络爬虫数据抓取 有兴趣,Scrapy 无疑是你不可错过的工具。它不仅强大高效,还能让你在最短的时间内搭建出一个完整的数据抓取系统。

在这篇文章中,我将带你了解如何使用 Scrapy 来抓取网页数据,处理数据,并保存到你需要的格式。无论你是数据分析师、研究员还是程序员,掌握 Scrapy 都能让你在数据抓取领域事半功倍。

什么是 Scrapy?

Scrapy 是一个开源的 Python 框架,用于快速、高效地抓取网页数据。它非常适合需要大量爬取网页的任务,比如抓取新闻网站、商品信息、用户评论等。Scrapy 提供了完整的工具链,不仅可以抓取网页,还可以处理抓取到的数据、保存到数据库或文件中。

小贴士:Scrapy 是一个异步框架,这意味着它可以在抓取多个网页时同时进行多个任务,从而提高效率。

安装 Scrapy

首先,你需要在本地安装 Scrapy。可以使用 pip 来安装:

pip install scrapy

安装完成后,你就可以开始使用 Scrapy 进行爬虫开发了。

创建一个 Scrapy 项目

在使用 Scrapy 开发爬虫之前,首先需要创建一个 Scrapy 项目。项目是一个包含所有爬虫代码、配置和设置的目录。通过命令行,我们可以快速创建一个项目。

创建项目

scrapy startproject my_spider

这将会在当前目录下创建一个名为 my_spider 的文件夹,里面包含了 Scrapy 项目所需的基本目录结构和文件。

my_spider/
    scrapy.cfg            # 配置文件
    my_spider/
        __init__.py
        items.py          # 定义数据模型
        middlewares.py    # 中间件
        pipelines.py      # 数据处理管道
        settings.py       # 项目设置
        spiders/          # 存放爬虫的文件夹
            __init__.py

小贴士:在创建项目后,你可以在 spiders 文件夹中添加你自己的爬虫脚本,每个爬虫都负责抓取不同的网站。

编写爬虫

接下来,我们来编写一个简单的爬虫。我们将在爬虫中定义目标网站,指定抓取的内容,以及如何处理抓取到的数据。

编写爬虫

my_spider/spiders 文件夹中创建一个新的 Python 文件 example_spider.py,内容如下:

import scrapy

class ExampleSpider(scrapy.Spider):
    name = 'example'  # 爬虫的名字
    start_urls = ['https://quotes.toscrape.com/']  # 爬虫开始抓取的URL

    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)

代码解析

  1. name:爬虫的名字,Scrapy 通过这个名字来启动爬虫。
  2. start_urls:定义爬虫从哪个 URL 开始抓取。这里我们抓取的是一个提供名人名言的网页。
  3. **parse()**:这个方法会解析网页的响应内容。在这里,我们使用 response.css() 来提取网页中的文本、作者和标签信息。
  4. yield:Scrapy 会将 yield 产生的数据输出,可以是提取的字段,也可以是继续抓取下一页的请求。
  5. **response.follow()**:这个方法用来抓取网页中的“下一页”链接,实现分页抓取。

小贴士:如果你对 CSS 选择器不熟悉,Scrapy 还支持使用 XPath 来提取数据。你可以根据自己的喜好选择使用。

运行爬虫

现在,一切准备就绪,你可以开始运行爬虫来抓取数据了。使用以下命令:

scrapy crawl example

运行爬虫后,Scrapy 会开始从 start_urls 中指定的 URL 开始抓取网页,并调用 parse 方法处理抓取到的数据。你会看到爬虫抓取的数据输出到命令行。

小贴士:如果你想将抓取的数据保存到文件中,可以使用以下命令:

scrapy crawl example -o quotes.json

这会将抓取的数据保存为 quotes.json 文件。

处理数据

在 Scrapy 中,处理抓取到的数据通常有两种方式:Item Pipeline中间件。我们可以通过配置 pipelines.py 文件来定义数据处理逻辑,比如将数据保存到数据库、清洗数据或去重。

定义数据模型

items.py 文件中,我们定义数据模型:

import scrapy

class QuoteItem(scrapy.Item):
    text = scrapy.Field()
    author = scrapy.Field()
    tags = scrapy.Field()

配置数据管道

pipelines.py 文件中,我们配置如何处理抓取到的数据:

class QuotePipeline:
    def process_item(self, item, spider):
        # 简单处理:去掉文本中的空格
        item['text'] = item['text'].strip()
        return item

然后在 settings.py 中启用该管道:

ITEM_PIPELINES = {
   'my_spider.pipelines.QuotePipeline'1,
}

小结

今天,我们通过简单的示例,了解了如何使用 Scrapy 来抓取网页数据。从创建项目、编写爬虫到处理抓取的数据,Scrapy 提供了一个完整的工具链,帮助我们快速高效地完成数据抓取任务。

小贴士:Scrapy 是一个功能强大的框架,它支持并发抓取、请求调度、数据存储等多个方面。如果你对爬虫开发有更高的需求,可以深入学习 Scrapy 的其他高级特性,比如自定义中间件、分布式爬虫等。

小练习:

  • 试着修改爬虫,抓取其他网站的数据,像是抓取新闻网站或商品信息。
  • 尝试将抓取到的数据保存到数据库中,而不是文件中。
  • 学习 Scrapy 中的 CrawlerProcess,它允许你在脚本中运行多个爬虫。

今天的 Python 学习之旅就到这里啦!记得动手敲代码,尝试自己做一些爬虫的练习。祝大家学习愉快,Python 学习节节高!


梦起时分
关注我了解更多信息
 最新文章