Scrapy框架快速入门指南

Scrapy框架快速入门指南

在数据驱动的世界中,快速而高效地抓取数据变得尤为重要。Scrapy是一个快速、简单但功能强大的爬虫框架,能够满足数据抓取的各种需求。今天,我们将快速入门Scrapy,了解如何使用它抓取和提取数据。

目录

  1. 前置条件
  2. 安装Scrapy
  3. 创建并设置Scrapy项目
  4. 编写Spider爬虫
  5. 存储抓取结果
  6. 设置与中间件
  7. 实用小贴士

前置条件

  • 操作系统:CentOS 7
  • Python版本:Python 3.8
  • Scrapy版本:2.8.0

安装Scrapy

  1. 确保Python和pip已安装:

    bash 复制代码
    sudo yum install -y python38 python38-pip
  2. 升级pip并安装Scrapy:

    bash 复制代码
    python3.8 -m pip install --upgrade pip
    pip3 install scrapy
  3. 验证安装:

    bash 复制代码
    scrapy version

    如果看到类似 Scrapy 2.8.0 的输出,说明安装成功。

创建并设置Scrapy项目

  1. 创建Scrapy项目:

    bash 复制代码
    scrapy startproject myproject
  2. 目录结构:

    bash 复制代码
    myproject/
        scrapy.cfg
        myproject/
            __init__.py
            items.py
            middlewares.py
            pipelines.py
            settings.py
            spiders/
                __init__.py
  3. 设置项目配置:

    编辑 myproject/settings.py 进行一些基本设置:

    python 复制代码
    BOT_NAME = 'myproject'
    SPIDER_MODULES = ['myproject.spiders']
    NEWSPIDER_MODULE = 'myproject.spiders'
    
    ROBOTSTXT_OBEY = True
    
    ITEM_PIPELINES = {
        'myproject.pipelines.MyProjectPipeline': 300,
    }

编写Spider爬虫

  1. 创建Spider爬虫:

    bash 复制代码
    scrapy genspider example example.com
  2. 编辑 myproject/spiders/example.py

    python 复制代码
    import scrapy
    
    class ExampleSpider(scrapy.Spider):
        name = "example"
        allowed_domains = ["example.com"]
        start_urls = ["http://example.com/"]
    
        def parse(self, response):
            yield {
                'title': response.xpath('//title/text()').get(),
                'url': response.url,
            }
  3. 运行爬虫并查看输出:

    bash 复制代码
    scrapy crawl example -o output.json

    这样,抓取结果将保存为 output.json 文件。

存储抓取结果

除了JSON文件,Scrapy还支持以多种格式存储数据:

  1. CSV格式:

    bash 复制代码
    scrapy crawl example -o output.csv
  2. XML格式:

    bash 复制代码
    scrapy crawl example -o output.xml
  3. MySQL数据库:

    pipelines.py 文件中实现数据存储到MySQL的功能:

    python 复制代码
    import mysql.connector
    
    class MyProjectPipeline:
        def open_spider(self, spider):
            self.conn = mysql.connector.connect(
                host='localhost',
                user='your_user',
                password='your_password',
                database='your_database'
            )
            self.cursor = self.conn.cursor()
    
        def close_spider(self, spider):
            self.conn.commit()
            self.conn.close()
    
        def process_item(self, item, spider):
            self.cursor.execute(
                "INSERT INTO your_table (title, url) VALUES (%s, %s)",
                (item['title'], item['url'])
            )
            return item

设置与中间件

设置

调整Scrapy的设置文件以提高性能或自定义爬虫行为:

  • 并发请求数:

    python 复制代码
    CONCURRENT_REQUESTS = 16
  • 下载延迟(秒):

    python 复制代码
    DOWNLOAD_DELAY = 2
  • 禁用cookies:

    python 复制代码
    COOKIES_ENABLED = False

中间件

中间件可用于修改请求和响应:

  1. middlewares.py 中创建自定义中间件:

    python 复制代码
    class CustomDownloaderMiddleware:
        def process_request(self, request, spider):
            spider.logger.info(f'Processing request: {request.url}')
            return None
  2. settings.py 中启用中间件:

    python 复制代码
    DOWNLOADER_MIDDLEWARES = {
        'myproject.middlewares.CustomDownloaderMiddleware': 543,
    }

实用小贴士

  1. 查看网络请求 :使用 scrapy shell 以交互方式查看和测试网络请求:

    bash 复制代码
    scrapy shell "http://example.com/"

    在shell中,你可以使用Xpath和CSS选择器来查看页面内容。

  2. 调试爬虫 :利用 logging 库记录爬虫的详细运行状态:

    python 复制代码
    import logging
    logging.basicConfig(level=logging.DEBUG)
  3. 遵守机器人协议 :遵循网站的 robots.txt 文件,以避免违反网站的爬取政策。

掌握了Scrapy的基础操作,接下来可以根据需求扩展功能,为复杂的数据抓取任务做准备啦。

相关推荐
小江的记录本6 小时前
【JVM虚拟机】垃圾回收GC:四种引用类型:强引用、软引用、弱引用、虚引用(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
APIshop7 小时前
Python 获取 1688 商品采集 API 接口 | 工厂货源自动化对接商品信息 | 无需选品
运维·python·自动化
deepin_sir7 小时前
10 - 函数
开发语言·python
charlee448 小时前
《GIS基础原理与技术实践》配套案例(Python版)
python·conda·numpy·gis·环境配置
枫叶林FYL8 小时前
项目十:事件溯源仓储管理系统(WMS)仿真实现
开发语言·python
渣渣xiong10 小时前
从零开始:前端转型AI agent直到就业第五十七天-第五十八天
前端·人工智能·python
小L~~~11 小时前
基于贪心策略的混合遗传算法求解01背包问题
python·算法
才兄说11 小时前
机器人二次开发机器人动作定制?动作迁移数据优化
python
用户83562907805111 小时前
用 Python 实现 Excel 散点图绘制与定制
后端·python
PAK向日葵11 小时前
从零实现 Python 虚拟机(一):PVM 基本原理介绍
python