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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值