Python 爬虫入门(九):Scrapy安装及使用「详细介绍」

Python 爬虫入门(九):Scrapy安装及使用「详细介绍」

  • 前言
  • 1. Scrapy 简介
  • 2. Scrapy 的安装
  • 2.1 环境准备
  • 2.2 安装 Scrapy
  • 3. 创建 Scrapy 项目
  • 3.1 创建项目
  • 3.2 项目结构简介
  • 4. 编写爬虫
  • 4.1 创建爬虫
  • 4.2 解析数据
  • 4.3 运行爬虫
  • 5. 存储数据
  • 5.1 存储为 JSON 文件
  • 5.2 存储到数据库
  • 5.2.1 MongoDB
  • 6. 处理请求和响应
  • 6.1 请求头设置
  • 6.2 处理响应
  • 7. 高级功能
  • 7.1 使用中间件
  • 7.2 使用代理
  • 7.3 使用管道处理数据
  • 8. 常见问题及解决方法
  • 8.1 爬虫被封禁
  • 8.2 数据解析错误
  • 8.3 数据存储失败
  • 总结
  • 前言

  • 欢迎来到“Python 爬虫入门”系列的第九篇文章。本篇文章将深入介绍 Scrapy 的安装及使用。Scrapy 是一个广泛使用的爬虫框架,其强大的功能和灵活的扩展性使得它在数据抓取领域占有重要地位。
  • 本文将从 Scrapy 的安装步骤开始,详细介绍其基本使用方法,包括创建项目、编写爬虫、解析数据、存储数据等内容。通过本篇文章的学习,你将能够掌握使用 Scrapy 进行高效数据抓取的技能。
  • 1. Scrapy 简介

    Scrapy 是一个用于抓取 Web 数据的应用框架。与其他 Python 爬虫库(如 BeautifulSoup 和 requests)相比,Scrapy 提供了更高的抓取速度、更强的扩展性和更便捷的项目管理方式。Scrapy 框架包含了数据抓取、处理和存储的一整套工具,使得用户能够更高效地完成爬虫任务。

    2. Scrapy 的安装

    2.1 环境准备

    在安装 Scrapy 之前,请确保你的计算机已经安装了以下环境:

    1. Python 3.6 及以上版本
    2. pip 包管理工具

    2.2 安装 Scrapy

    使用 pip 命令可以方便地安装 Scrapy:

    pip install scrapy
    

    安装完成后,可以通过以下命令验证 Scrapy 是否安装成功:

    scrapy
    

    如果安装成功,你将看到 Scrapy 的版本信息。

    3. 创建 Scrapy 项目

    3.1 创建项目

    在命令行中,导航到你希望存放项目的目录,并运行以下命令来创建一个新的 Scrapy 项目:

    scrapy startproject myproject
    

    此命令将在当前目录下创建一个名为 myproject 的文件夹,文件夹结构如下:

    myproject/
        scrapy.cfg
        myproject/
            __init__.py
            items.py
            middlewares.py
            pipelines.py
            settings.py
            spiders/
                __init__.py
    

    3.2 项目结构简介

  • scrapy.cfg: Scrapy 项目的配置文件。
  • myproject/: 项目的 Python 模块,之后会在此加入代码。
  • items.py: 定义爬取的数据结构。
  • middlewares.py: 定义 Scrapy 中间件。
  • pipelines.py: 定义数据处理管道。
  • settings.py: 定义项目的配置。
  • spiders/: 存放爬虫代码的目录。
  • 4. 编写爬虫

    4.1 创建爬虫

    spiders/ 目录下创建一个新的爬虫文件,例如 example_spider.py,并编写以下内容:

    import scrapy
    
    class ExampleSpider(scrapy.Spider):
        name = 'example'
        start_urls = ['https://jsonplaceholder.typicode.com/posts']
    
        def parse(self, response):
            for post in response.json():
                yield {
                    'userId': post['userId'],
                    'id': post['id'],
                    'title': post['title'],
                    'body': post['body']
                }
    

    4.2 解析数据

    parse 方法中,我们解析响应内容并提取所需的数据。response.json() 方法将响应内容解析为 JSON 格式,便于我们提取数据。

    4.3 运行爬虫

    在项目的根目录下,运行以下命令来启动爬虫:

    scrapy crawl example
    

    如果一切正常,你将看到爬虫开始抓取数据,并在控制台输出抓取到的内容。

    5. 存储数据

    5.1 存储为 JSON 文件

    Scrapy 提供了多种存储抓取数据的方法,这里介绍将数据存储为 JSON 文件的方法。在命令行中运行以下命令:

    scrapy crawl example -o output.json
    

    此命令将抓取的数据保存到 output.json 文件中。

    5.2 存储到数据库

    我们也可以将抓取的数据存储到数据库中,例如 MongoDB 或 MySQL。在 pipelines.py 文件中编写数据存储的逻辑。

    5.2.1 MongoDB

    首先,安装 pymongo 库:

    pip install pymongo
    

    然后在 pipelines.py 中添加以下代码:

    import pymongo
    
    class MongoPipeline:
    
        def __init__(self):
            self.client = pymongo.MongoClient('localhost', 27017)
            self.db = self.client['scrapy_db']
            self.collection = self.db['scrapy_collection']
    
        def process_item(self, item, spider):
            self.collection.insert_one(dict(item))
            return item
    

    settings.py 中启用该管道:

    ITEM_PIPELINES = {
        'myproject.pipelines.MongoPipeline': 300,
    }
    

    6. 处理请求和响应

    6.1 请求头设置

    为了模拟真实用户的浏览行为,我们可以在爬虫中设置请求头。在爬虫文件中添加 headers 属性:

    class ExampleSpider(scrapy.Spider):
        name = 'example'
        start_urls = ['https://jsonplaceholder.typicode.com/posts']
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
        }
    
        def start_requests(self):
            for url in self.start_urls:
                yield scrapy.Request(url, headers=self.headers, callback=self.parse)
    

    6.2 处理响应

    parse 方法中,我们可以根据需要处理响应数据。这里的示例中,我们将 JSON 数据解析并提取需要的字段。

    7. 高级功能

    7.1 使用中间件

    Scrapy 中间件可以在请求和响应之间执行一些自定义的处理逻辑。例如,我们可以使用中间件来处理请求的重试逻辑、设置代理等。

    middlewares.py 中添加以下示例代码:

    from scrapy import signals
    
    class CustomMiddleware:
    
        @classmethod
        def from_crawler(cls, crawler):
            s = cls()
            crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
            return s
    
        def process_request(self, request, spider):
            request.headers['User-Agent'] = 'Custom User-Agent'
    
        def process_response(self, request, response, spider):
            return response
    
        def process_exception(self, request, exception, spider):
            pass
    
        def spider_opened(self, spider):
            spider.logger.info('Spider opened: %s' % spider.name)
    

    settings.py 中启用中间件:

    DOWNLOADER_MIDDLEWARES = {
        'myproject.middlewares.CustomMiddleware': 543,
    }
    

    7.2 使用代理

    有时我们需要通过代理来抓取数据。Scrapy 支持通过中间件设置代理。在 middlewares.py 中添加以下代码:

    class ProxyMiddleware:
    
        def process_request(self, request, spider):
            request.meta['proxy'] = 'http://your_proxy_address'
    

    settings.py 中启用该代理中间件:

    DOWNLOADER_MIDDLEWARES = {
        'myproject.middlewares.ProxyMiddleware': 543,
    }
    

    7.3 使用管道处理数据

    数据管道用于处理和存储抓取的数据。在 pipelines.py 中定义数据管道,并在 settings.py 中启用它。

    8. 常见问题及解决方法

    8.1 爬虫被封禁

    当我们抓取某些网站时,可能会遇到 IP 被封禁的情况。为了解决这个问题,我们可以使用代理轮换、设置合理的抓取间隔时间等方法。

    8.2 数据解析错误

    在解析数据时,可能会遇到数据结构变化或数据格式不匹配的情况。为了应对这些问题,我们可以在解析过程中加入异常处理机制,确保程序在遇到错误时不会崩溃。

    8.3 数据存储失败

    在将数据存储到数据库或文件时,可能会遇到存储失败的情况。常见的原因包括数据库连接问题、数据格式不匹配等。通过日志记录和异常处理,可以更好地定位和解决这些问题。

    总结

    通过本文的学习,我们深入了解了 Scrapy 的安装和使用方法。Scrapy 作为一个功能强大的爬虫框架,能够帮助我们高效地抓取和处理网页数据。从项目创建、编写爬虫、解析数据到数据存储,我们一步步学习了 Scrapy 的基本使用方法,并介绍了一些高级功能和常见问题的解决方法。

    作者:blues_C

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python 爬虫入门(九):Scrapy安装及使用「详细介绍」

    发表回复