【Python进阶】Python爬虫-Scrapy

🌈 个人主页:(时光煮雨)
🔥 高质量专栏:vulnhub靶机渗透测试
👈 希望得到您的订阅和支持~
💡 创作高质量博文(平均质量分95+),分享更多关于网络安全、Python领域的优质内容!(希望得到您的关注~)



前言

Scrapy 是一个功能强大的 Python 爬虫框架,专门用于抓取网页数据并提取信息。
Scrapy常被用于数据挖掘、信息处理或存储历史数据等应用。
Scrapy 内置了许多有用的功能,如处理请求、跟踪状态、处理错误、处理请求频率限制等,非常适合进行高效、分布式的网页爬取。
与简单的爬虫库(如 requests 和 BeautifulSoup)不同,Scrapy 是一个全功能的爬虫框架,具有高度的可扩展性和灵活性,适用于复杂和大规模的网页抓取任务。
Scrapy 官网:https://scrapy.org/
Scrapy 特点与介绍:https://www.runoob.com/w3cnote/scrapy-detail.html
Scrapy 架构图(绿线是数据流向):
在这里插入图片描述
Scrapy 的工作基于以下几个核心组件:

  • Spider:爬虫类,用于定义如何从网页中提取数据以及如何跟踪网页的链接。
  • Item:用来定义和存储抓取的数据。相当于数据模型。
  • Pipeline:用于处理抓取到的数据,常用于清洗、存储数据等操作。
  • Middleware:用来处理请求和响应,可以用于设置代理、处理 cookies、用户代理等。
  • Settings:用来配置 Scrapy 项目的各项设置,如请求延迟、并发请求数等。

🥛一、Scrapy 项目结构

在使用 Scrapy 之前,你需要先安装它,我们使用 pip 安装:

pip install scrapy

Scrapy 项目是一个结构化的目录,其中包含多个文件夹和模块,旨在帮助你组织爬虫的代码。

Scrapy 使用命令行工具来创建和管理爬虫项目。你可以使用以下命令创建一个新的 Scrapy 项目:

scrapy startproject test_scrapy_project_001

在这里插入图片描述
这将创建一个名为 test_scrapy_project_001 的项目,项目结构大致如下:

test_scrapy_project_001/
    scrapy.cfg            # 项目的配置文件
    test_scrapy_project_001/            # 项目源代码文件夹
        __init__.py
        items.py          # 定义抓取的数据结构
        middlewares.py    # 定义中间件
        pipelines.py      # 定义数据处理管道
        settings.py       # 项目的设置文件
        spiders/           # 存放爬虫代码的文件夹
            __init__.py
            myspider.py   # 自定义的爬虫代码

如图所示:
在这里插入图片描述

☕二、编写一个简单的 Scrapy 爬虫

以下是一个基本的 Scrapy 爬虫示例,展示了如何从网页中抓取数据。

🍼2.1.创建爬虫项目

我们创建一个爬虫项目:

scrapy startproject test_scrapy_project_001

执行以上命令,如果成功会输出:

Scrapy 2.13.3 - no active project

Usage:
  scrapy <command> [options] [args]

Available commands:
  bench         Run quick benchmark test
  fetch         Fetch a URL using the Scrapy downloader
  genspider     Generate new spider using pre-defined templates
  runspider     Run a self-contained spider (without creating a project)
  settings      Get settings values
  shell         Interactive scraping console
  startproject  Create new project
  version       Print Scrapy version
  view          Open URL in browser, as seen by Scrapy

  [ more ]      More commands available when run from project directory

Use "scrapy <command> -h" to see more info about a command

D:\LeetCode\spiders>scrapy startproject test_scrapy_project_001
New Scrapy project 'test_scrapy_project_001', using template directory 'D:\IDE\python\Lib\site-packages\scrapy\templates\project', created in:
    D:\LeetCode\spiders\test_scrapy_project_001

You can start your first spider with:
    cd test_scrapy_project_001
    scrapy genspider example example.com

在这里插入图片描述
生成的项目结构如下:
在这里插入图片描述
然后进入该目录:

cd test_scrapy_project_001

接下来通过 scrapy genspider 命令来创建一个爬虫:

scrapy genspider douban_spider movie.douban.com

执行完命令后,会新创建一个"douban_spider.py"的文件,目录结构如下:
在这里插入图片描述
douban_spider.py文件的默认代码:

import scrapy


class DoubanSpiderSpider(scrapy.Spider):
    name = "douban_spider"
    allowed_domains = ["movie.douban.com"]
    start_urls = ["https://movie.douban.com"]

    def parse(self, response):
        pass

代码说明:

  • name:定义爬虫的名称,必须是唯一的。
  • allowed_domains:限制爬虫的访问域名,防止爬虫爬取其他域名的网页。
  • start_urls:定义爬虫的起始页面,爬虫将从这些页面开始抓取。
  • parse:parse 方法是每个爬虫的核心部分,用于处理响应并提取数据。它接收一个 response 对象,表示服务器返回的页面内容。

🍼2.2.编写爬虫代码

🍵2.2.1.注意事项

编写爬虫代码前我们需要注意几个点:

  • 豆瓣等网站可能会检测爬虫行为,建议设置 USER_AGENT 和 DOWNLOAD_DELAY 来模拟正常用户行为。
  • 在爬取数据时,请遵守目标网站的 robots.txt 文件规定,避免对服务器造成过大压力。
  • 如果频繁爬取,可能会触发 IP 封禁。

🍵2.2.2.修改 settings.py 配置

在 settings.py 中添加以下配置,以模拟浏览器请求并绕过反爬虫机制:

# 设置 User-Agent
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'

# 不遵守 robots.txt 规则
ROBOTSTXT_OBEY = False

# 设置下载延迟,避免过快请求
DOWNLOAD_DELAY = 2

# 启用自动限速扩展
AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_START_DELAY = 2
AUTOTHROTTLE_MAX_DELAY = 5

在爬虫代码中,添加自定义请求头(如 User-Agent 和 Referer),以进一步模拟

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

(时光煮雨)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值