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

相关推荐
炼丹师小米几秒前
Ubuntu24.04.1系统下VideoMamba环境配置
python·环境配置·videomamba
GFCGUO6 分钟前
ubuntu18.04运行OpenPCDet出现的问题
linux·python·学习·ubuntu·conda·pip
985小水博一枚呀2 小时前
【深度学习基础模型】神经图灵机(Neural Turing Machines, NTM)详细理解并附实现代码。
人工智能·python·rnn·深度学习·lstm·ntm
萧鼎3 小时前
Python调试技巧:高效定位与修复问题
服务器·开发语言·python
IFTICing3 小时前
【文献阅读】Attention Bottlenecks for Multimodal Fusion
人工智能·pytorch·python·神经网络·学习·模态融合
大神薯条老师3 小时前
Python从入门到高手4.3节-掌握跳转控制语句
后端·爬虫·python·深度学习·机器学习·数据分析
程序员爱德华3 小时前
Python环境安装教程
python
huanxiangcoco3 小时前
152. 乘积最大子数组
python·leetcode
萧鼎4 小时前
Python常见问题解答:从基础到进阶
开发语言·python·ajax
PythonFun4 小时前
Python技巧:如何避免数据输入类型错误
前端·python