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

相关推荐
狂奔solar27 分钟前
yelp数据集上识别潜在的热门商家
开发语言·python
Tassel_YUE28 分钟前
网络自动化04:python实现ACL匹配信息(主机与主机信息)
网络·python·自动化
聪明的墨菲特i35 分钟前
Python爬虫学习
爬虫·python·学习
努力的家伙是不讨厌的2 小时前
解析json导出csv或者直接入库
开发语言·python·json
云空2 小时前
《Python 与 SQLite:强大的数据库组合》
数据库·python·sqlite
凤枭香3 小时前
Python OpenCV 傅里叶变换
开发语言·图像处理·python·opencv
测试杂货铺3 小时前
外包干了2年,快要废了。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
艾派森3 小时前
大数据分析案例-基于随机森林算法的智能手机价格预测模型
人工智能·python·随机森林·机器学习·数据挖掘
小码的头发丝、3 小时前
Django中ListView 和 DetailView类的区别
数据库·python·django
Chef_Chen4 小时前
从0开始机器学习--Day17--神经网络反向传播作业
python·神经网络·机器学习