【python】网络爬虫与信息提取--scrapy爬虫框架介绍

news2024/11/23 20:21:05

一、scrapy爬虫框架介绍

        scrapy是一个功能强大的网络爬虫框架,是python非常优秀的第三方库,也是基于python实现网络爬虫的重要技术路线。scrapy不是哟个函数功能库,而是一个爬虫框架。

        爬虫框架:是实现爬虫功能的一个软件结构和功能组件集合。

        安装:pip install scrapy

        安装后小测:scrapy -h

        scrapy的组成:

        在这五个模块之间,数据包括用户提交的网络爬虫请求以及从网络上获取的相关内容,在这些结构间进行流动,形成了数据流

        scrapy框架包含三条主要的数据流路径:

        第一条路径(1、2)从spiders到engine的地方获得了爬取用户的请求request,scheduler负责对爬取请求进行调度

        第二条路径(3-6),首先engine从scheduler获得下一个要爬取的网络请求,这个时候的网络请求是真实的要去网络上爬取的请求,那么engine获得这样的请求后,通过中间键发送给downloader模块,downloader模块拿到这个请求后,真实的链接互联网并且爬取相关的网页,爬取到网页后downloader模块将爬取的内容形成一个对象,这个对象叫响应response,那么将所有的内容封装成response后,将这个响应再通过中间键engine最终发送给spiders.

        第三条路径(7、8)首先spiders处理从downloader获得的响应,它处理之后产生了两个数据类型,一个数据类型叫爬取项item,另外一个数据是新的爬取请求,也就是说我们从网络上获得一个网页后,如果这个网页有其他的链接也是我们十分感兴趣的,那么我们就可以在spiders中增加相关的功能,对新的连接发起再次的爬取。engine模块收到这两类数据之后,将其中的item发送给item pipelines,将其中的request发送给sheduler进行调度,从而为后期的再次处理以及再次启动网络爬虫请求提供新的数据来源。

        整个框架的入口的spiders,出口是item pipelines.

        其中,engine,downloaders,scheduler已有实现,用户只需编写item pipelines和spiderws。

二、scrapy爬虫框架解析

        engine:这个模块是框架的核心。用于控制所有模块之间的数据流和根据条件触发事件进行触发。

        downloader:根据用户提供的请求来下载网页。它的功能比较单一,只是获得一个请求并向网络中提交请求,最终获得返回的相关内容。

        scheduler:对所有的爬取请求进行调度管理。

        downloader middleware(用户可以修改代码):目的为实施engine 、schedu;er、downloder之间进行用户可配置的控制。功能为修改、丢弃、新增请求或响应。

        spider(用户主要编写这部分的代码):解析downloader返回的响应(response),产生爬取项(scraped item),并且能产生额外的爬取请求。简单来说,它向整个框架提供了最初始的访问链接,同时对每次返回来的内容进行解析,再次产生新的爬取请求,并且从内容中分析出提取出相关的数据。

        item pipelines(需要用户编写配置代码):以流水线方式处理spider产生的爬取项。由一组操作顺序组成,类似流水线,每个操作是一个item pipeline类型。可能操作包括:清理、检验和查重爬取项中的html数据、将数据存储在数据库中。

        spider middleware(用户可以编写配置代码):目的为对请求和爬取项进行再处理。功能为修改、丢弃、新增请求或爬取项。

三、requests库与scrapy库的比较

        相同点:两者都可以进行页面请求和爬取,Python爬虫的两个重要技术路线。两者的可用性都好,文档丰富,入门简单。两者都没有处理js、提交表单、应对验证码等功能(可扩展)的支持。

        不同点:爬取某个网页使用requests,爬取大量网页使用scrapy。

     

        使用建议:非常小的需求使用requests,不太小的需求使用scrapy框架,定制程度很高的需求(不考虑规模)或自搭框架则requests>scrapy。一个爬虫能够持续的,或者不间断的,或者是周期性的爬取一个网站的信息,并且这个数据的想你想我们希望去积累,形成我们之间的爬取库,这种情况适用scrapy框架。

三、scrapy爬虫的常用命令

        scrapy是为了持续运行设计的专业爬虫框架,提供操作的scrap用命令行。

        工具:在windows下通过command启动命令台(命令行更容易自动化,适合脚本控制,本质上,scrapy是给程序员使用的),并且输入命令scrapy -h

        scrapy命令行格式:>scrapy <command> [options] [args]。其中command是scrapy具体命令。

        在scrapy框架下一个工程是最大的单元,一个工程可以相当于大的scrapy框架,而在scrapy中,它可以有多个爬虫,每一个爬虫相当于框架中的一个spider模块.

四、scrapy爬虫的第一个实例

        演示HTML页面地址:http://python123.io/ws/demo.html

        文件名称:demo.html

        步骤如下:

        1、打开命令行,然后切换到我们需要项目的位置(例如切换到D则输入D:)

        2、输入scrapy startproject python123demo,用以创建一个名字为 python123demo的工程。

 

        此时生成的工程目录如下:python123demo为外层目录。scrapy.cfg用于部属scrapy爬虫的部属文件,部属的概念是指将这样的爬虫放在特定的服务器上,并且在服务器配置好相关的接口,对于我们本机使用的爬虫来讲,我们不需要改变部属文件。与scrapy/cfg同目录的python123ddemo是指scrapy框架的用户自定义python代码。_init_.py是初始化脚本,用户不需要编写。items.py是items代码模板(继承类),这里也不需要用户编写。middlewares.py指的是middlewares代码模板(继承类),如果用户需要扩展middlewares,那么就需要把这些功能写到这个文件当中。Pipelines.py对应pipelines代码模板(继承类)。seettings.py是scrapy爬虫的配置文件,如果需要修改功能,就需要修改对应的配置项。spiders是spiders代码模板目录(继承类),这个目录下存放的是python123demo这个工程中所建立的爬虫,这些爬虫需要符合爬虫模板的约束。spiders下的_init_.py是初始文件,无需修改,若运行过的项目,spiders下会多一个_pycache_,为缓存目录,无需修改。

        3.进入工程,在工程中产生一个scrapy爬虫,命令为scrapy genspider demo python123.io,这条命令的作用是生成一个名称为demo的spider。

        这时候发现 在spider下生成了demo.py

  

        以下为demo.py的内容: 

import scrapy


class DemoSpider(scrapy.Spider):
    name = "demo" #说明当前爬虫的名字叫demo
    allowed_domains = ["python123.io"]#最开始用户提交命令行的域名,指的是这个爬虫在爬取网站的时候,只能爬取这个域名下的相关链接。
    start_urls = ["https://python123.io"]#后面以列表形式包含的多个url,事实上就是scrapy框架所要爬取页面的初始页面

    def parse(self, response):#解析页面的空的方法,用于处理响应,解析内容形成字典,发现新的url爬取请求,self是面向对象所属关系的标记
        pass

         4.用idle打开demo,然后配置spiders

import scrapy
 
 
class DemoSpider(scrapy.Spider):
    name = 'demo'
    # allowed_domains = ['python123.io']  不需要 注释掉 
    start_urls = ['http://python123.io/ws/demo.html']
 
    def parse(self, response):
        fname = response.url.split('/')[-1] #这里面我们从响应的url中提取文件的名字,作为我们保存为本地的文件名,然后我们将返回的内容保存为文件
        with open(fname,'wb') as f: # 返回的内容保存为文件
            f.write(response.body)
        self.log('Saved file %s.' % name)
        

        5.执行项目:在命令行输入scrapy crawl demo,捕获的页面将被存储在demo.html文件中

        

yield关键字的使用

        yield与“生成器”息息相关。

        生成器是一个不断产生值的函数。包含yild语句的函数是一个生成器。生成器在每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值。而唤醒后它所产生的局部变量的值跟之前执行所使用的值是一致的。也就是说,一个函数执行到某个位置,然后它被冻结,再次被唤醒的时候,还是从这个位置继续去执行,那么每次执行的时候,它就可能产生一个数据,这样这个函数就不停的执行。

        生成器大部分与循环一起出现,这样我们就可以使用一个for循环调用生成器。

        使用生成器的好处:更节省存储空间,响应更迅速,使用更灵活。

五、scrapy爬虫的基本使用

        步骤:1.创建一个工程和soider模板 。2、编写spider 。  3、编写item pipeline . 4、优化配置策略。

        涉及的三个类:request类、response类、item类        

        request:class.scrapy.http.Request()。request对象表示一个http请求。由spider生成,由downloader执行。

        

        resopnse:class.scrapy.http.Response()。response对象表示一个http响应。由downloader生成,由spider处理。

        item:class.scrapy.http.Item()。Item对象表示一个从HTML页面中提取的信息内容。由spider生成,由item pipeliner处理。item类似字典类型,可以按照字典类型操作。

        scrapy爬虫提取信息的方法:beautiful Soup,lxml,re,xpath selector,CSS selector。

        CSS selector格式:<html>.css('a::attr(href)').extract()

        

        

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot应用集成Actuator端点解决未授权访问的漏洞

一、前言 我们知道想要实时监控我们的应用程序的运行状态&#xff0c;比如实时显示一些指标数据&#xff0c;观察每时每刻访问的流量&#xff0c;或者是我们数据库的访问状态等等&#xff0c;需要使用到Actuator组件&#xff0c;但是Actuator有一个访问未授权问题&#xff0c;…

C# CAD交互界面-自定义面板集-comboBox选择图层

运行环境Visual Studio 2022 c# cad2016 一、代码说明 SelectLayer方法是一个自定义的AutoCAD命令方法&#xff0c;通过[CommandMethod("SelectLayer")]进行标记。方法首先获取当前活动文档&#xff0c;并检查是否有效。创建一个名为"SelectLayer"的Pale…

云原生概念

云原生是一条使用户能&#xff1a; 1.低运维、 2.敏捷的、 3.以可扩展、可复制的方式&#xff0c; 最大化的利用”云“的能力、发挥”云“的价值的最 佳路径 云原生&#xff0c;是一条最佳路径或实践 参考&#xff1a;https://edu.aliyun.com/course/314164/lesson/7815

docker环境常用容器安装

目录 1.安装partainer 2.安装myql 3.安装redis 4.安装Minio 5.安装zibkin 6.安装nacos 7.安装RabbitMq 8.安装RocketMq 8.1启动service 8.2修改对应配置 8.3启动broker 8.4启动控制台 9.安装sentinel 10.安装elasticsearch 11.安装Kibana 12.安装logstash/file…

Flutter使用问题整理

前言 写这篇文章是为了记录平时在使用flutter时遇到的问题&#xff0c;及解决方案&#xff0c;方便再次遇到时能够快速解决。 问题及解决 问题1 真机运行项目&#xff0c;在构建时提示 Running Gradle task assembleDebug... 41.8s [!] App r…

ECMAScript 2024(ES15)将带来超实用的新特性

ECMAScript语言规范每年都会进行一次更新&#xff0c;而备受期待的 ECMAScript 2024 将于 2024 年 6 月正式亮相。目前&#xff0c;ECMAScript 2024 的候选版本已经发布&#xff0c;为我们带来了一系列实用的新功能。接下来&#xff0c;就让我们一起先睹为快吧&#xff01; 全…

科技云报道:云原生是大模型“降本增效”的解药吗?

科技云报道原创。 在过去一两年里&#xff0c;以GPT和Diffusion model为代表的大语言模型和生成式AI&#xff0c;将人们对AI的期待推向了一个新高峰&#xff0c;并吸引了千行百业尝试在业务中利用大模型。 国内各家大厂在大模型领域展开了激烈的军备竞赛&#xff0c;如&#…

iconfont的使用(最详解)

目录 一、Iconfont是什么&#xff1f; 二、Iconfont如何使用 1.官网注册 2.新建项目 3.项目中使用 Unicode方式 Font class方式 Symbol方式 三、总结 一、Iconfont是什么&#xff1f; iconfont是阿里旗下的一套图标库&#xff0c;UI设计师设计号图标后&#xff0c;会…

用pandas做简单策略回测

一&#xff0c;RSI策略 数据&#xff1a; 代码 import pandas as pd# 读取贵州茅台股票历史交易数据 df pd.read_csv(贵州茅台股票历史交易数据.csv) missing_values df.isnull().sum()# print("缺失值数量&#xff1a;") # print(missing_values)# 计算RSI指标 …

【LeetCode: 590. N 叉树的后序遍历 + DFS】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

机器学习中梯度下降法的缺点

机器学习中的梯度下降法是一种寻找函数最小值的优化算法&#xff0c;广泛应用于训练各种模型&#xff0c;尤其是在深度学习中。尽管其应用广泛&#xff0c;但梯度下降法也存在一些不可忽视的缺点&#xff1a; 1. 局部最小值和鞍点 局部最小值问题&#xff1a; 对于非凸函数&a…

Rofin罗芬Laser激光DQ80设备操作说明书

Rofin罗芬Laser激光DQ80设备操作说明书

Elasticsearch:什么是 kNN?

kNN - K-nearest neighbor 定义 kNN&#xff08;即 k 最近邻算法&#xff09;是一种机器学习算法&#xff0c;它使用邻近度将一个数据点与其训练并记忆的一组数据进行比较以进行预测。 这种基于实例的学习为 kNN 提供了 “惰性学习&#xff08;lazy learning&#xff09;” 名…

【大模型】大模型基础知识

几个常用术语 模型公式参数 K矩阵&#xff1a;字典 V矩阵&#xff1a;关键字的权重数值 AGI&#xff1a;通用人工智能 分词、词性关联、词性标注、知识图谱。分词操作是AI的开发&#xff0c;但是离AGI越来越远。自注意力机制的核心思想是摒弃分词等操作&#xff0c;面向更通…

机器人初识 —— 电机传动系统

一、背景 波士顿动力公司开发的机器人&#xff0c;其电机传动系统是其高性能和动态运动能力的核心部分。电机传动系统通常包括以下几个关键组件&#xff1a; 1. **电动马达**&#xff1a;波士顿动力的机器人采用了先进的电动马达作为主要的动力源&#xff0c;如伺服电机或步进…

Netty Review - NIO空轮询及Netty的解决方案源码分析

文章目录 Pre问题说明NIO CodeNetty是如何解决的&#xff1f;源码分析入口源码分析selectCntselectRebuildSelector Pre Netty Review - ServerBootstrap源码解析 Netty Review - NioServerSocketChannel源码分析 Netty Review - 服务端channel注册流程源码解析 问题说明 N…

探索AI视频生成新纪元:文生视频Sora VS RunwayML、Pika及StableVideo——谁将引领未来

探索AI视频生成新纪元&#xff1a;文生视频Sora VS RunwayML、Pika及StableVideo——谁将引领未来 sora文生视频&#xff0c;探索AI视频生成新纪元 由于在AI生成视频的时长上成功突破到一分钟&#xff0c;再加上演示视频的高度逼真和高质量&#xff0c;Sora立刻引起了轰动。在S…

vscode 开发代码片段插件

环境准备 node - 20v版本 &#xff0c;推荐使用nvm进行版本控制全局安装 "yo" 是 Yeoman 工具的命令行工具&#xff0c; npm i yo -g全局安装 generator-code 是一个 Yeoman 脚手架 gernerator-code npm i gernerator-code -g全局安装 npm install -g vsce官方文档 …

代码随想录算法训练营第55天 | 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费

最佳买卖股票时机含冷冻期 股票题做到这地步&#xff0c;可以发现分析每一天的可能状态与状态之间的转换是解决问题的关键。这道题中每一天可以有4种有效状态&#xff1a; 持有股票不持有股票&#xff0c;当天之前就已经卖出了股票不持有股票&#xff0c;当天卖出股票冷冻期状…

数字化转型导师坚鹏:政府数字化转型之数字化新技术解析与应用

政府数字化转型之数字化新技术解析与应用 课程背景&#xff1a; 数字化背景下&#xff0c;很多政府存在以下问题&#xff1a; 不清楚新技术的发展现状&#xff1f; 不清楚新技术的重要应用&#xff1f; 不清楚新技术的成功案例&#xff1f; 课程特色&#xff1a; 有…