scrapy框架

news/2024/12/21 20:35:37/

scrapy_0">1、认识scrapy

scripy是一个爬取网站数据,提取结构性数据而编写的应用框架。它使用Twisted这个异步网络库来处理网络通讯,包含了各种中间件接口。

  • 优点:

    • 利用scrapy的设计实现了非阻塞的异步操作。相比于传统的阻塞式请求,极大的提高了CPU的利用率,大大提改了爬取效率;

    • 配置简单,只需少量代码即可完成任务;

    • 拓展性强、插件丰富,比如scrapy + redis 、爬虫可视化文件;

    • 解析数据方便,scrapy封装了css、xpath、正则表达式等解析器,提供了更方便高级的selector构造器,可以高效处理爬取下来的数据。

scrapy_14">2、scrapy架构

2.1 架构流程

请添加图片描述

  • Spiders将需要发送Requests经由Scrapy Engine交给Scheduler;

  • Requests经Scheduler入队处理后,经过Scrapy Engine,DownloaderMiddlewares(可选,主要有User_Agent, Proxy代理)交给Downloader。

  • Downloader向互联网发送请求,并接收下载response,将response经ScrapyEngine,SpiderMiddlewares(可选)交给Spiders。

  • Spiders处理response,提取数据并将数据经ScrapyEngine交给ItemPipeline保存(可以是本地,可以是数据库)。

  • 提取url重新经ScrapyEngine交给Scheduler进行下一个循环。直到无Url请求程序停止结束。

2.2 组件介绍
组件作用
Scrapy Engine(引擎)负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等已实现
Scheduler(调度器)它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎已实现
Downloader(下载器)负责下载(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理。已实现
Spider(爬虫)它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler需要手写
Item Pipeline(管道)它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方需要手写
Downloader Middlewares(下载中间件)一个可以自定义扩展下载功能的组件。一般不用手写
Spider Middlewares(Spider中间件)一个可以自定扩展和操作引擎和Spider中间通信的功能组件一般不用手写

3、创建项目

scrapy_45">3.1 下载scrapy
python">pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple
3.2 查看指令
python">scrapy --help

请添加图片描述

3.3 创建项目
python"># myspider为项目名称
scrapy startproject myspider 
3.3 查看生成文件

执行创建新项目的文件后,创建了一个文件夹,在这个文件夹的同名文件夹下生成了许多文件,这些文件就是scrapy的组件。

请添加图片描述

4、创建爬虫

4.1 打开创建文件夹

请添加图片描述

4.2 执行命令
python"># scrapy genspider 爬虫名 爬取域名
scrapy genspider douban movie.douban.com

请添加图片描述

5、爬取并解析数据
  • douban.py
python">import scrapy
from scrapy import Selectorfrom myspider.items import MovieItemclass DoubanSpider(scrapy.Spider):name = "douban"allowed_domains = ["movie.douban.com"]start_urls = ["https://movie.douban.com/top250"]  # 修改起始爬取url为TOP250def parse(self, response, **kwargs):selector = Selector(response)movies = selector.xpath("//div[@class='article']/ol/li")for movie in movies:movie_item = MovieItem()movie_item['title'] = movie.css("span.title::text").get()movie_item['subject'] = movie.css("span.inq::text").get()movie_item['rating_num'] = movie.css("span.rating_num::text").get()movie_item['detail'] = movie.css("a::attr(href)").get()yield movie_item
  • items.py
python">import scrapy# 将获取到的数据组装为Item对象
class MovieItem(scrapy.Item):title = scrapy.Field()subject = scrapy.Field()rating_num = scrapy.Field()detail = scrapy.Field()
  • settings.py
python">USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
  • 运行命令
python"># 爬取并将数据储存在douban.csv文件中
scrapy crawl douban -o douban.csv

经上面的步骤即可完成简单的爬取,虽然看起来复杂,但在实际上,我们只需在现有的框架上进行简单修改即可。

相关代码地址:scrapy" rel="nofollow">https://gitee.com/justinc666/crawler/tree/master/scrapy


http://www.ppmy.cn/news/1534183.html

相关文章

HTML5+CSS+JavaScript剪子石头布游戏

HTML5CSSJavaScript剪子石头布游戏 用HTML5CSSJavaScript剪子石头布游戏实现剪子石头布游戏,游戏有成绩计数,人、机输赢情况,及平局情况。 ✂代表剪刀,▉代表石头,▓ 代表布,给出人机双方的出拳情况 游戏…

【Linux】进程替换、命令行参数及环境变量(超详解)

目录 进程替换 替换函数的含义 命令行参数 环境变量 PATH 进程替换 我们先看代码&#xff1a; 1 #include<stdio.h>2 #include<unistd.h>3 int main()4 {5 printf("process...begin!\n");6 7 execl("/usr/bin/ls","ls"…

【QT】亲测有效:“生成的目标文件包含了过多的段,超出了编译器或链接器允许的最大数量”错误的解决方案

在使用dlib开发人脸对齐功能时&#xff0c;出现了”生成的目标文件包含了过多的段&#xff0c;超出了编译器或链接器允许的最大数量的错误“。 主要功能代码如下&#xff1a; #include <QApplication> #include <QImage> #include <QDebug>#include <dlib…

rust的nutyp验证和validator验证数据的方法

使用nutype验证 Cargo.toml nutype { version "0.5.0", features ["serde","regex"] } regex "1" thiserror "1"modules.rs #[nutype(sanitize(trim, lowercase),validate(not_empty, len_char_min 3, len_char_max …

《OpenCV》—— 指纹验证

用两张指纹图片中的其中一张对其验证 完整代码 import cv2def cv_show(name, img):cv2.imshow(name, img)cv2.waitKey(0)def verification(src, model):sift cv2.SIFT_create()kp1, des1 sift.detectAndCompute(src, None)kp2, des2 sift.detectAndCompute(model, None)fl…

国庆刷题(day2)

C语言刷题&#xff1a; C刷题&#xff1a;

http请求过程 part-2

http请求过程 http应用层 实体 实体分为实体首部和实体主体&#xff0c;实体首部是用来描述主体的 实体部分是可选的&#xff0c;它被用来运送请求或者响应的数据 传输层-TCP HTTP连接是建立在TCP连接的基础上 以流形式通过一条已经打开的TCP连接&#xff0c;按顺序进行…

移动端的每日任务,golang后端数据库应该怎么设计

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…