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的基础操作,接下来可以根据需求扩展功能,为复杂的数据抓取任务做准备啦。

相关推荐
浦信仿真大讲堂18 分钟前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study1 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境2 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境2 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd1232 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy12393102162 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb003 小时前
一个项目带你入门AI应用开发01
python
0566463 小时前
Python康复训练——常用标准库
开发语言·python·学习
昆曲之源_娄江河畔3 小时前
Python如何安装flask, pymssql
开发语言·python·flask·pymssql
0566463 小时前
Python康复训练——控制流与函数
开发语言·python·学习