Scrapy爬虫框架

Scrapy爬虫框架

【1】Scrapy基础模块

模块 功能 实现
爬虫(Spiders) 定义爬虫规则,发送request请求和处理返回的response都在这里实现 需要手写
数据存储(Items) 定义爬取下来的数据结构,以及初步处理 需要手写
数据处理管道(Pipelines) 自定义数据处理管道类,对爬取数据进行处理、清洗和存储等操作 需要手写
引擎(Engine) 控制整个爬虫流程,处理数据流、触发事件等 Scrapy已实现
调度器(Scheduler) 接受引擎传来的request请求,按照算法确定请求顺序,发送给下载器 Scrapy已实现
下载器(Downloader) 下载请求的网页内容并返回给引擎,实现请求发送和页面下载功能 Scrapy已实现
中间件(Middleware) 插件机制,处理请求和响应的流程,进行请求发送前和响应返回后的处理,如设置请求头、代理等 可手写
扩展(Extensions) 提供机制,用户可自定义功能如监控、日志、统计信息等 可手写

【2】Scrapy生命周期图

image-20240407111909987

  • 开始请求发送:爬虫引擎开始处理初始请求,并将它们发送到调度器
  • 请求调度:调度器接收请求并根据调度算法将它们发送到下载器
  • 下载网页:下载器下载网页并将响应发送回引擎
  • 解析响应:引擎接收响应并将其发送到Spider处理
  • 爬取数据:Spider处理响应并从中提取数据,然后生成新的请求
  • 数据处理:爬虫处理管道接收提取的数据并执行后续处理,如数据清洗、存储等
  • 存储数据:处理后的数据被存储到指定的数据存储介质中,例如Mysql
  • 处理异常:在处理过程中可能发生异常,需要通过异常处理机制进行处理。
  • 爬虫关闭

【3】Scrapy安装

pip install scrapy

检查安装是否成功

cmd输入scrapy有以下信息说明安装成功

image-20240407115012525

【4】创建第一个Scrapy爬虫

【1】新建项目目录

方式1

【1】新建一个文件夹用pycharm打开

image-20240407121232187

【2】终端输入scrapy startproject FirstSpider

FirstSpider是自己取的项目名

image-20240407121618657

方式2

【1】新建文件夹双击路径输入cmd

image-20240407121921101

此时cmd会自动打开于当前目录路径

【2】输入scrapy startproject FirstSpider

image-20240407122026743

【2】创建爬虫文件

完成上述操作后可以系统会创建这样一个目录结构

image-20240407122203329

├── NewsPro 					# 项目名
│   ├── __init__.py
│   ├── items.py				# 管道
│   ├── middlewares.py			# 中间件
│   ├── pipelines.py 			# 管道---> 处理持久化
│   ├── settings.py				# 项目配置文件
│   └── spiders					# 里面放了自定义的爬虫
│       ├── __init__.py
│       ├── baidu.py			# 自定义爬虫文件
│       └── wangyi.py			# 自定义爬虫文件
└── scrapy.cfg					# 项目上线配置

创建目录后spiders里是空的,这时候就需要我们创建第一个爬虫文件

scrapy genspider 爬虫名 域名

记得要切换到spiders目录下

image-20240407140157605

image-20240407140931160

此时第一个爬虫文件就已创建成功了

【5】settings.py

image-20240407143103603

  1. BOT_NAME:
    • BOT_NAME 定义爬虫的名称
  2. SPIDER_MODULES:
    • SPIDER_MODULES 是一个包含爬虫模块的列表,指定了Scrapy应该查找爬虫的模块
  3. NEWSPIDER_MODULE:
    • NEWSPIDER_MODULE 用于指定新建爬虫时的默认模块,当使用 scrapy genspider 命令创建新爬虫时,新爬虫文件将被放置在指定的模块中
  4. USER_AGENT:
    • 用户代理,默认注释,这个东西非常重要,如果不写很容易被判断为电脑,简单点设置一个Mozilla/5.0即可
  5. ROBOTSTXT_OBEY:
    • ROBOTSTXT_OBEY 控制是否遵守 robots.txt 协议,如果设置为 True,Scrapy 将遵守网站的 robots.txt 规则,但是会有很多数据爬不到,因此我们设为False
  6. CONCURRENT_REQUESTS:
    • 最大并发数,也就是允许同时开启多少爬虫线程

image-20240407145531437

  1. SPIDER_MIDDLEWARES:
    • 用于配置 Spider 中间件,键是中间件的路径,值是中间件的顺序,数值越小表示中间件优先级越高。
  2. ITEM_PIPELINES:
    • 用于配置 Item 管道,控制数据的处理和存储过程。键是管道的路径,值是管道的顺序,数值越小表示管道优先级越高
    • 管道会影响数据的处理和存储过程,如数据清洗、数据存储到数据库等操作

【6】items.py

image-20240407172430584

这是创建scrapy项目后默认创建的管道类,也可以自行新建别的管道,这里一般就会用来接受spider传过来的数据并对其进行**[打包]**

【7】pipelines.py

image-20240407190225107

scrapy创建时会自动创建默认的item类,这里一般用于处理数据和持久化存储,例如将数据处理后存入数据库,也可以根据需求自行创建,但是创建新的item类时需要去settings中注册

【8】启动爬虫

在spider文件中随便打印一下response

import scrapy


class BaiduSpider(scrapy.Spider):
    name = "baidu"
    allowed_domains = ["www.baidu.com"]
    start_urls = ["https://www.baidu.com"]

    def parse(self, response):
        print(f'这是响应:{response}')

启动爬虫的两种方式

方式1

直接终端启动,但是需要将路径切换到spiders.py所在的目录下

PS D:\Users\Desktop\爬虫\FirstSpider\FirstSpider> scrapy crawl baidu

image-20240407191604799

成功

方式2

在主目录下创建启动文件

image-20240407191815324

这里将启动文件main.py定义在项目路径上级目录

# main.py
from scrapy.cmdline import execute

import sys
import os

# 定义项目路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
# 模拟命令行命令[scrapy crawl baidu]
execute(["scrapy", "crawl", "baidu"])

image-20240407192024282

成功,内容和正常输出相同,只是字体红色

相关推荐

  1. 爬虫框架Scrapy

    2024-04-08 10:10:02       53 阅读
  2. python爬虫框架Scrapy

    2024-04-08 10:10:02       62 阅读
  3. 爬虫框架Scrapy应用

    2024-04-08 10:10:02       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-08 10:10:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-08 10:10:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-08 10:10:02       87 阅读
  4. Python语言-面向对象

    2024-04-08 10:10:02       96 阅读

热门阅读

  1. Android14系统go版添加微件功能

    2024-04-08 10:10:02       28 阅读
  2. 数字孪生与深度学习交融

    2024-04-08 10:10:02       35 阅读
  3. 靡语IT:Bootstrap 简介

    2024-04-08 10:10:02       31 阅读
  4. Rust---模式匹配之match和if let

    2024-04-08 10:10:02       37 阅读
  5. LeetCode 每日一题 2024/4/1-2024/4/7

    2024-04-08 10:10:02       36 阅读
  6. 计算机网络概述

    2024-04-08 10:10:02       36 阅读
  7. sql中如何添加数据

    2024-04-08 10:10:02       38 阅读
  8. spiapi

    2024-04-08 10:10:02       36 阅读
  9. 推荐一个好用的数据库映射架构

    2024-04-08 10:10:02       39 阅读
  10. hibernate执行外部sql

    2024-04-08 10:10:02       42 阅读
  11. NLP学习路线总结

    2024-04-08 10:10:02       31 阅读
  12. 高频SQL 有趣的电影

    2024-04-08 10:10:02       34 阅读
  13. linux 用户组与附加组

    2024-04-08 10:10:02       37 阅读