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已安装:

    sudo yum install -y python38 python38-pip
    
  2. 升级pip并安装Scrapy:

    python3.8 -m pip install --upgrade pip
    pip3 install scrapy
    
  3. 验证安装:

    scrapy version
    

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

创建并设置Scrapy项目

  1. 创建Scrapy项目:

    scrapy startproject myproject
    
  2. 目录结构:

    myproject/
        scrapy.cfg
        myproject/
            __init__.py
            items.py
            middlewares.py
            pipelines.py
            settings.py
            spiders/
                __init__.py
    
  3. 设置项目配置:
    编辑 myproject/settings.py 进行一些基本设置:

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

编写Spider爬虫

  1. 创建Spider爬虫:

    scrapy genspider example example.com
    
  2. 编辑 myproject/spiders/example.py

    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. 运行爬虫并查看输出:

    scrapy crawl example -o output.json
    

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

存储抓取结果

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

  1. CSV格式:

    scrapy crawl example -o output.csv
    
  2. XML格式:

    scrapy crawl example -o output.xml
    
  3. MySQL数据库:
    pipelines.py 文件中实现数据存储到MySQL的功能:

    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的设置文件以提高性能或自定义爬虫行为:

  • 并发请求数:

    CONCURRENT_REQUESTS = 16
    
  • 下载延迟(秒):

    DOWNLOAD_DELAY = 2
    
  • 禁用cookies:

    COOKIES_ENABLED = False
    

中间件

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

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

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

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

实用小贴士

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

    scrapy shell "http://example.com/"
    

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

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

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

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

  • 40
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值