十二:爬虫-Scrapy框架(上)

一:Scrapy介绍

1.Scrapy是什么?

Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架(异步爬虫框架)
通常我们可以很简单的通过 Scrapy 框架实现一个爬虫,抓取指定网站的内容或图片
Scrapy使用了Twisted异步网络框架,可以加快我们的下载速度

  • 异步和非阻塞的区别

1.png

异步:调用在发出之后,这个调用就直接返回,不管有无结果
非阻塞:关注的是程序在等待调用结果时的状态,指在不能立刻得到结果之前,该调用不会阻塞当前线程

2.Scrapy的优势

爬虫必备的技术

  • 能够使我们的爬虫程序更加稳定 效率更高(多线程)
  • 配置和可扩展性非常强(很灵活)
  • downloader 下载器(基于多线程的) 发送请求 获取响应的

3.Scrapy参考学习

scrapy官方学习网址:https://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html
最新的:https://docs.scrapy.org/en/latest/

4.Scrapy的安装

pip install scrapy==2.5.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

二:Scrapy工作流程

一种爬虫方式:

另一种爬虫方式:

工作流程:

scrapy工作流程.png
image.png

1.各个组件的功能介绍:

Scrapy engine(引擎)总指挥:负责数据和信号的在不同模块间的传递scrapy已经实现
Scheduler(调度器)一个队列,存放引擎发过来的request请求scrapy已经实现
Downloader(下载器)下载把引擎发过来的requests请求,并返回给引擎scrapy已经实现
Spider(爬虫)处理引擎发来的response,提取数据,提取url,并交给引擎需要手写
Item Pipline(管道)处理引擎传过来的数据,比如存储需要手写
Downloader Middlewares(下载中间件)可以自定义的下载扩展,比如设置代理一般不用手写
Spider Middlewares(中间件)可以自定义requests请求和进行response过滤一般不用手写
1 引擎(engine)   scrapy已经实现
scrapy的核心, 所有模块的衔接, 数据流程梳理2 调度器(scheduler)   scrapy已经实现
本质上这东西可以看成是一个队列,里面存放着一堆我们即将要发送的请求,可以看成是一个url的容器
它决定了下一步要去爬取哪一个url,通常我们在这里可以对url进行去重操作。3 下载器(downloader)  scrapy已经实现
它的本质就是用来发动请求的一个模块,小白们完全可以把它理解成是一个requests.get()的功能,
只不过这货返回的是一个response对象.4 爬虫(spider)  需要手写 
这是我们要写的第一个部分的内容, 负责解析下载器返回的response对象,从中提取到我们需要的数据5 管道(Item pipeline)
这是我们要写的第二个部分的内容, 主要负责数据的存储和各种持久化操作6  下载中间件(downloader Middlewares)  一般不用手写
可以自定义的下载扩展 比如设置代理 处理引擎与下载器之间的请求与响应(用的比较多)7  爬虫中间件(Spider Middlewares)  一般不用手写
可以自定义requests请求和进行response过滤(处理爬虫程序的响应和输出结果以及新的请求)

三:Scrapy入门与总结

1.Scrapy入门

前提:路径切换 cd  copy path  复制绝对路径 1. 创建scrapy项目
scrapy startproject mySpider
scrapy startproject(固定的)
mySpider(不固定的 需要创建的项目的名字)2. 进入项目里面:cd mySpider3. 创建爬虫程序
scrapy genspider example example.comscrapy genspider:固定的
example:爬虫程序的名字(不固定的)
example.com:可以允许爬取的范围(不固定的) 是根据你的目标url来指定的 其实很重要 后面是可以修改的目标url:https://www.baidu.com/scrapy genspider bd baidu.com4. 执行爬虫程序
scrapy crawl bd
scrapy crawl:固定的
db:执行的爬虫程序的名字可以通过start.py文件执行爬虫项目:
from scrapy import cmdline
cmdline.execute("scrapy crawl bd".split())

2.Scrapy文件说明

baidu.py爬虫文件 # 爬虫程序的名字name = 'bd'# 可以爬取的范围# 有可能我们在实际进行爬取的时候  第一页可能是xxx.com 第三页可能就变成了xxx.cn # 或者xxx.yy 那么可能就会爬取不到数据# 所以我们需要对allowed_domains进行一个列表的添加allowed_domains = ['baidu.com']# 起始url地址  会根据我们的allowed_domains对网页前缀进行一定的补全 # 但有时候补全的url不对 所以我们也要去对他进行修改start_urls = ['https://www.baidu.com/']# 专门用于解析数据的def parse(self, response):  items.py 数据封装的
middlewares.py 中间件(爬虫中间件和下载中间件)
pipelines.py 管道(保存数据的)settings.py Scrapy的配置项# 1 自动生成的配置,无需关注,不用修改
BOT_NAME = 'mySpider'
SPIDER_MODULES = ['mySpider.spiders']
NEWSPIDER_MODULE = 'mySpider.spiders'# 2 取消日志
LOG_LEVEL = 'WARNING'# 3 设置UA,但不常用,一般都是在MiddleWare中添加
USER_AGENT = 'mySpider (+http://www.yourdomain.com)'# 4 遵循robots.txt中的爬虫规则,很多人喜欢False,当然我也喜欢....
ROBOTSTXT_OBEY = True# 5 对网站并发请求总数,默认16
CONCURRENT_REQUESTS = 32# 6 相同网站两个请求之间的间隔时间,默认是0s。相当于time.sleep()
DOWNLOAD_DELAY = 3# 7 禁用cookie,默认是True,启用
COOKIES_ENABLED = False# 8  默认的请求头设置
DEFAULT_REQUEST_HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en',
}# 9 配置启用爬虫中间件,Key是class,Value是优先级
SPIDER_MIDDLEWARES = {'mySpider.middlewares.MyspiderSpiderMiddleware': 543,
}# 10 配置启用Downloader MiddleWares下载中间件
DOWNLOADER_MIDDLEWARES = {'mySpider.middlewares.MyspiderDownloaderMiddleware': 543,
}# 11 开启管道  配置启用Pipeline用来持久化数据
ITEM_PIPELINES = {'mySpider.pipelines.MyspiderPipeline': 300,
}

settings配置项更多参考: https://www.cnblogs.com/seven0007/p/scrapy_setting.html

3.Scrapy总结

scrapy其实就是把我们平时写的爬虫进行了四分五裂式的改造. 对每个功能进行了单独的封装, 并且, 各个模块之间互相的不做依赖. 一切都由引擎进行调配. 这种思想希望你能知道–解耦. 让模块与模块之间的关联性更加的松散. 这样我们如果希望替换某一模块的时候会非常的容易. 对其他模块也不会产生任何的影响

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/226604.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW的便携式车辆振动测试分析

随着计算机和软件技术的发展,虚拟仪器正逐渐成为机械工业测试领域的主流。在现代机械工程中,特别是车辆振动测试,传统的测试方法不仅设备繁杂、成本高昂,而且操作复杂。为解决这些问题,开发了一款基于美国国家仪器公司…

1. pytorch mnist 手写数字识别

文章目录 一、数据集介绍1.1、简介1.2 详细介绍1、数据量2、标注量3. 标注类别4.数据下载5.数据集解读 二、读取、加载数据集1、pytorch 自带库函数2、通过重构Dataset类读取特定的MNIST数据或者制作自己的MNIST数据集 三、模型构建四、 runtraintest评估模型的性能检查点的持续…

在Java中使用sort()方法进行排序

思想 采用Array类的sort()方法,sort()可以对数组进行排序,有很多重载格式,可以对任何数据类型进行不同数据类型的排序。 代码 import java.util.Arrays; import java.util.Random; public class SortSequence {public static void main(String[] arg…

C# ASP.NET 实验室 检验中心 医疗LIS源码

LIS系统能够自动处理大量的医学数据,包括样本采集、样本处理、检测分析、报告生成等。它能够快速、准确地进行化验检测,提高医院的运营效率。LIS系统还提供了丰富的数据分析功能,能够对医院化验室的业务流程进行全面、细致的监控。 LIS系统优…

【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean)

文章目录 🍔Bean的获取🎄注入IOC容器对象⭐代码实现🛸根据bean的名称获取🛸根据bean的类型获取🛸根据bean的名称和类型获取 🎄Bean的作用域⭐代码实现🎈注意 🎄第三方Bean⭐代码实现…

iPortal内置Elasticsearch启动失败的几种情况——Linux

作者:yx 文章目录 前言一、端口占用二、ES启动过慢三、磁盘占用过高,导致ES变为只读模式 前言 在Linux环境启动iPortal后有时会出现搜索异常的情况,如下截图,这是因为Elasticsearch(以下简称“ES”)没启动…

【Midjourney】Midjourney根据prompt提示词生成人物图片

目录 🍇🍇Midjourney是什么? 🍉🍉Midjourney怎么用? 🔔🔔Midjourney提示词格式 Midjourney生成任务示例 例1——航空客舱与乘客 prompt prompt翻译 生成效果 大图展示 细节大…

K8s实战-init容器

概念: 初始化容器的概念 比如一个容器A依赖其他容器,可以为A设置多个 依赖容易A1,A2,A3 A1,A2,A3要按照顺序启动,A1没有启动启动起来的 话,A2,A3是不会启动的,直到所有的静态容器全 部启动完毕…

Python数据分析之Pandas的数据加载与预处理

一、数据分析 数据分析就是让看似杂乱无章的数据产生价值,通过数据的筛选、汇总等等操作将数据背后的信息集中和提炼出来,最终分析出一个结果或预测出事件的变化规律。 二、数据清洗 数据加载与预览 1、去除/填充有缺失的数据 2、去除/修改格式错误或…

ChatGPT4.0(中文版)国内无限制免费版(附网址)

ChatGPT,由OpenAI开发的人工智能语言模型。它是你的数字对话伙伴,无论你有何问题或需要什么帮助,它都能提供有用的信息。 经过不断的研发和更新,ChatGPT的性能和功能得到了显著提升。现在,我们将重点介绍ChatGPT的两个…

C#高级 08Json操作

1.概念 Json是存储和交换文本信息的语法。类似于XML。Json比XML更小、更快、更易解析。Json与XML一样是一种数据格式。Json是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。Json采取完全独立于语言的文本格式, 但是也使用了类似于C语言的习惯。这些特性使…

创建VLAN及VLAN间通信

任务1、任务2、任务3实验背景: 在一家微型企业中,企业的办公区域分为两个房间,一个小房间为老板办公室,一个大房间为开放办公室,财务部和销售部的员工共同使用这个办公空间。我们需要通过VLAN的划分,使老板…

3D视觉-激光三角测量法的分类

按照入射激光光束和被测物体表面法线的角度关系,一般分为直射式和斜射式两种方式。 1)直射式测量 如图所示,激光器发出的光线,经会聚透镜聚焦后垂直入射到被测物体表面上,物体移动或者其表面变化,导致入射…

elasticsearch系列四:集群常规运维

概述 在使用es中如果遇到了集群不可写入或者部分索引状态unassigned,明明写入了很多数据但是查不到等等系列问题该怎么办呢?咱们今天一起看下常用运维命令。 案例 起初我们es性能还跟得上,随着业务发展壮大,发现查询性能越来越不…

鸿蒙开发(二)- 鸿蒙DevEco3.X开发环境搭建

上篇说到,鸿蒙开发目前势头旺盛,头部大厂正在如火如荼地进行着,华为也对外宣称已经跟多个厂商达成合作。目前看来,对于前端或客户端开发人员来说,掌握下鸿蒙开发还是有些必要性的。如果你之前是从事Android开发的&…

Jackson ImmunoResearch纳米二抗(Nano Secondary Antibodies)

驼科,如羊驼和美洲驼,会产生一类独特的仅由重链组成的抗体。而抗原结合片段(Fab),也称为仅可变重链片段抗体(Variable Heavy-Chain only fragment antibodies,VHH片段),或纳米抗体,是一种新型抗体形式。凭借…

GBASE南大通用数据库提供的高可用负载均衡功能

GBASE南大通用GBase 8a ODBC 提供的高可用负载均衡功能是指,GBase 8a ODBC 会将客户 端请求的数据库集群连接平均分摊到集群所有可用的节点上。 GBASE南大通用数据库负载均衡的使用方法 GBASE南大通用GBase 8a ODBC 提供两种方式来使用高可用负载均衡。一种是配置数…

透彻掌握GIT基础使用

网址 https://learngitbranching.js.org/?localezh_CN 清屏 clear重新开始reset

Selenium框架添加CONNECT以抓取https网站

Selenium框架 Selenium是一个用于Web应用程序测试的强大工具,它提供了一系列的API,可以模拟用户在浏览器中的操作,包括点击、填写表单、导航等。在进行网络提取数据时,https网站的数据提取一直是一个技术难点。Selenium作为一个自…

改变进程优先级,Nodejs的os.setPriority()方法

改变进程优先级,Nodejs的os.setPriority()方法 os.setPriority()方法是os模块的内置应用程序编程接口,在nodejs v10.10之后的版本中有效,用于设置pid和优先级指定的进程的调度优先级。 语法: os.setPrio…