《数据采集技术》课件-项目四 基于框架实现动态网页数据采集与存储_第1页
《数据采集技术》课件-项目四 基于框架实现动态网页数据采集与存储_第2页
《数据采集技术》课件-项目四 基于框架实现动态网页数据采集与存储_第3页
《数据采集技术》课件-项目四 基于框架实现动态网页数据采集与存储_第4页
《数据采集技术》课件-项目四 基于框架实现动态网页数据采集与存储_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目四

基于框架实现动态网页数据采集与存储目录Content1使用Scrapy框架完成新闻公告页面数据采集与存储项目导言零

Scrapy是Python的一个应用Twisted异步处理的第三方应用程序框架,用户只需要定制开发几个模块即可实现一个爬虫,用来快速爬取网站并从页面中抓取网页内容以及各种图片。学习目标零知识目标了解Scrapy相关概念熟悉Scrapy框架的设置掌握文本解析与内容存储精通内存存储逻辑技能目标具备项目创建的能力具备使用Scrapy操作命令创建Scrapy项目的能力具备解析网页中文本的能力具备网页数据采集能力素养目标具有较好的团队精神具有高度的责任感具备很强的学习和沟通能力具有清晰思路、较强的逻辑思维能力Scrapy框架基础认知壹任务技能Scrapy简介及安装Scrapy简介、Scrapy安装、Scrapy项目结构、Scrapy项目构建流程Scrapy操作指令在操作系统的任何位置均可以使用的全局命令应用于Scrapy项目中的项目命令字段定义及Scrapy设置自定义字段、项目设置、通用参数设置文本解析XPath选择器、CSS选择器内容存储文件存储、管道存储优势核心说明异步高效基于Twisted异步框架,非阻塞IO,可同时处理大量请求,爬取速度远超同步爬虫模块化设计引擎、调度器、下载器等组件独立,可灵活配置/替换(如换用不同存储方式)强大解析能力内置XPath、CSS选择器,直接提取网页文本/属性,无需额外集成第三方解析库自动去重调度器(Scheduler)内部维护请求指纹(fingerprint),避免重复爬取同一URL可扩展性强支持集成Redis(分布式爬取)、MongoDB/MySQL(数据存储)、Selenium(动态页)中间件机制通过下载中间件实现代理IP、User-Agent伪装、Cookie管理,突破反爬虫限制Scrapy是Python生态下的异步爬虫框架,专为“高效爬取网页结构化数据”设计,可用于新闻采集、数据挖掘、监控等场景,尤其适合中大型项目(多爬虫管理、复杂抓取流程)。其核心优势源于“模块化”和“异步机制”,具体如下:Scrapy框架基础认知壹(1)Scrapy简介Scrapy框架基础认知壹(2)Scrapy安装Scrapy属于Python的第三方框架,可以使用pip安装、wheel安装和源码安装等安装方式,并且在通过pip方式安装Scrapy时,会自动安装lxml、pyOpenSSL、Twisted、PyWin32等相关的依赖库。打开cmd命令窗口,输入“pipinstallscrapy”进入Python的交互式命令行,通过import引入Scrapy进行安装验证Step1Step2Scrapy框架基础认知壹(2)Scrapy安装第一步:先检查Python环境(前置准备,避免后续报错)(1)明确Scrapy支持的Python版本“Scrapy不支持Python3.6及以下版本,推荐用Python3.8-3.11——如果你的Python版本太老,先升级(Windows用‘python-mpipinstall--upgradepip’。”(2)“查看Python版本”的命令Windows:打开CMD,输入“python--version”;“如果显示‘Python3.9.7’这类,就没问题;如果显示‘Python2.7.x’,说明用了默认的Python2,要切换到Python3。”Scrapy框架基础认知壹(2)Scrapy安装第二步:分系统安装Scrapy(1)Windows系统步骤1:以“管理员身份”打开CMD(右键CMD,选“以管理员身份运行”——避免权限不足,导致依赖库安装失败);步骤2:输入“pipinstallscrapy”——这里要提醒“如果出现‘Twisted安装失败’的报错,别慌,是Windows缺少编译环境”;补充“Twisted安装失败的解决方案”:①去Pythonlibs网站下载对应Python版本的Twistedwheel文件(比如Python3.964位,下载“Twisted-22.10.0-cp39-cp39-win_amd64.whl”);②用“pipinstall下载路径\Twisted-xxx.whl”先装Twisted,再重新“pipinstallscrapy”。Scrapy框架基础认知壹(2)Scrapy安装

第三步:环境验证——不止“importscrapy”,多做一步确认(1)基础验证:进入Python交互环境Windows:CMD输入“python”,进入后输入“importscrapy”,无报错则成功;(2)进阶验证:查看Scrapy版本+测试命令退出Python交互环境(输入“exit()”),在终端/CMD输入“scrapyversion”——显示“Scrapy2.11.0”(或其他版本号),说明安装成功;再输入“scrapy-h”——显示Scrapy的命令列表(startproject、genspider等),说明命令行可用,后续能正常创建项目。Scrapy框架基础认知壹(2)Scrapy安装报错类型可能原因解决方案Twisted安装失败(Windows)缺少C++编译环境用wheel文件安装:先下对应版本Twisted.whl,再pipinstall文件名“Nomodulenamedscrapy”Python环境混乱(多版本)用“python3-mpipinstallscrapy”指定Python3lxml库安装失败缺少系统依赖(Linux)先装libxml2-dev:sudoapt-getinstalllibxml2-dev常见安装报错汇总Scrapy核心架构与工作机制贰(1)核心组件及功能组件名称核心作用ScrapyEngine(引擎)框架“大脑”:调度所有组件,传递请求/响应/数据,触发各环节执行(如从调度器取请求、给下载器发请求)Scheduler(调度器)请求“管家”:接收引擎传递的Request,按队列排序,去重后等待引擎调用(避免重复爬取)Downloader(下载器)请求“执行者”:接收引擎的Request,向目标URL发送HTTP请求,获取网页响应(Response)后返回引擎Spiders(爬虫)数据“提取器”:接收引擎的Response,用XPath/CSS解析数据生成Item(待存储数据),或生成新Request(爬取后续页面)ItemPipeline(管道)数据“处理器”:接收爬虫生成的Item,进行清洗(如去空格)、过滤(如删无效数据)、存储(如存文件/数据库)Middlewares(中间件)功能“扩展层”:分两类——①下载中间件:拦截下载器的请求/响应(如加代理);②爬虫中间件:拦截引擎与爬虫的交互(如修改Response)Scrapy由6大核心组件构成,各组件通过“引擎(Engine)”协调工作,组件功能如下表:贰Scrapy核心架构与工作机制(1)核心组件及功能贰(2)Scrapy项目结构Scrapy核心架构与工作机制贰01030405060702items.py字段定义文件scrapy.cfg项目配置文件middlewares.py中间件设置文件spiders爬虫文件存储目录settings.py项目设置文件pipelines.py项目管道文件MySpider.py爬虫文件Scrapy核心架构与工作机制Scrapy核心架构与工作机制贰(3)Scrapy项目构建流程6处理数据5解析响应4下载网页3分发请求2调度请求7循环爬取1生成初始请求贰完整工作流程(数据流转闭环)步骤1:生成初始请求(爬虫→引擎)触发者:Spiders(爬虫)核心动作:爬虫通过start_urls定义初始爬取URL(如新闻列表页:start_urls=['/lcjtww/445068/445237/index.html']),并自动生成对应的Request对象(包含URL、请求方式等信息),将其传递给ScrapyEngine(引擎)。作用:明确爬取的“起点”,为后续流程提供初始请求源。Scrapy核心架构与工作机制(3)工作流程贰Scrapy核心架构与工作机制(3)工作流程步骤2:调度请求(引擎→调度器)触发者:ScrapyEngine(引擎)核心动作:引擎接收爬虫传递的Request后,不直接处理,而是转发给Scheduler(调度器);调度器对Request进行两项关键操作:①

排序:按请求优先级(默认FIFO)加入请求队列;②

去重:通过“请求指纹(fingerprint)”识别重复URL(如同一页面的多次请求),过滤已爬取的Request,避免资源浪费。作用:管理请求队列,确保爬取有序、不重复。贰Scrapy核心架构与工作机制(3)工作流程步骤3:分发请求(调度器→引擎→下载器)触发者:ScrapyEngine(引擎)核心动作:引擎持续从调度器的请求队列中“取走”待处理的Request,并通过DownloaderMiddlewares(下载中间件)

传递给Downloader(下载器);下载中间件在此环节可拦截请求,添加“反爬虫配置”(如设置User-Agent伪装浏览器、添加代理IP)。作用:将调度后的请求传递给下载器,准备发起HTTP请求。贰Scrapy核心架构与工作机制(3)工作流程步骤4:下载网页(下载器→引擎)触发者:Downloader(下载器)核心动作:下载器接收Request后,向目标URL发送HTTP请求(GET/POST),获取网页的Response对象(包含HTML源码、响应状态码等);下载完成后,Response会再次经过下载中间件(如处理编码问题、过滤无效响应),最终返回给ScrapyEngine(引擎)。作用:获取网页原始数据,为后续解析提供素材。贰Scrapy核心架构与工作机制(3)工作流程步骤5:解析响应(引擎→爬虫)触发者:ScrapyEngine(引擎)核心动作:引擎将Response传递给Spiders(爬虫),爬虫执行核心的parse()方法,通过XPath/CSS选择器解析Response,提取两类关键信息:①

目标数据:将解析到的内容(如新闻标题、发布时间)封装成Item对象(需提前在items.py定义字段),传递给引擎;②

新URL:若存在“下一页”“详情页”等未爬取URL(如新闻列表页的“下一页”链接),生成新的Request对象(可通过yieldscrapy.Request(新URL,callback=parse)指定解析函数),传递给引擎。作用:从原始网页中提取有用信息,同时拓展爬取范围(生成新请求)。贰Scrapy核心架构与工作机制(3)工作流程步骤6:处理数据(引擎→管道)触发者:ScrapyEngine(引擎)核心动作:引擎接收爬虫传递的Item后,转发给ItemPipeline(管道);管道按预设逻辑对Item进行处理:①

数据清洗:去除文本空格、过滤无效字符(如“发布时间”中的乱码);②

数据过滤:剔除不符合要求的数据(如空标题、无效时间);③

数据存储:将处理后的Item存入目标位置(如JSON/CSV文件、MySQL/MongoDB数据库)。作用:确保数据的完整性、有效性,并实现持久化存储。贰Scrapy核心架构与工作机制(3)工作流程步骤7:循环爬取(新请求→调度器)触发者:ScrapyEngine(引擎)核心动作:引擎接收爬虫传递的“新Request”后,再次转发给Scheduler(调度器),调度器重复“排序、去重”操作,将新请求加入队列;引擎继续从调度器取请求,重复步骤3-6,直到调度器的请求队列为空(无新URL可爬),爬取流程终止。作用:实现“自动批量爬取”,覆盖多页面、多维度的数据。贰Scrapy核心架构与工作机制(3)工作流程流程简化记忆(口诀)爬虫生请求→引擎交调度→下载器取请求→响应回引擎→爬虫解析(出Item/新请求)→管道存数据/新请求循环关键核心:组件交互逻辑整个流程中,ScrapyEngine(引擎)是唯一的“数据中转站”,所有组件间的交互均需通过引擎,不存在组件间的直接通信:调度器、下载器、爬虫、管道均不直接交换数据,而是通过引擎传递Request/Response/Item;中间件(下载中间件、爬虫中间件)是“拦截器”,仅在引擎与下载器/爬虫的交互路径上生效,不改变核心数据流方向。Scrapy核心操作:命令与解析弎1Scrapy操作指令全局命令命令描述-h查看可用命令的列表fetch使用Scrapydownloader提取的URLrunspider未创建项目的情况下,运行一个编写好的spider模块settings规定项目的设定值shell给定URL的一个交互式模块startproject用于创建项目version显示Scrapy版本view使用Scrapydownloader提取URL并显示在浏览器中的内容genspider使用内置模板在spiders文件下创建一个爬虫文件bench测试scrapy在硬件上运行的效率Scrapy核心操作:命令与解析弎项目命令命令描述crawl用来使用爬虫抓取数据,运行项目check检查项目并由crawl命令返回list显示本项目中可用爬虫(spider)的列表edit可以通过编辑器编辑爬虫parse通过爬虫分析给定的URLScrapy核心操作:命令与解析弎2字段定义及Scrapy设置(1)自定义字段

在进行网页内容的爬取时,明确目标是不可或缺的一个步骤。在Scrapy中,通过修改items.py文件中代码进行字段的自定义操作即可明确爬取的目标。语法格式:#导入scrapy模块importscrapy#定义包含scrapy.Item参数的类classScrapynameItem(scrapy.Item):#definethefieldsforyouritemherelike:#自定义字段name=scrapy.Field()#通过提示passScrapy核心操作:命令与解析弎除了通过“scrapy.Field()”方法外,还可以通过import命令从Scrapy中先引入Item和Field,之后直接使用即可。语法格式:#导入scrapy的Item参数和Field方法fromscrapyimportItem,Field#定义包含scrapy.Item参数的类classScrapynameItem(Item):#自定义字段name=Field();#通过提示passScrapy核心操作:命令与解析弎items.py文件中包含的内容仅为字段的定义,还需在MySpider.py文件中通过类名称引入items.py文件中class定义的类并实例化字段对象,之后通过“对象[字段名称]=值”的方式进行赋值操作。语法格式:importscrapy#导入ScrapynameItem类fromScrapyName.itemsimportScrapynameItemclassMyspiderSpider(scrapy.Spider):defparse(self,response):item=ScrapynameItem()item["name"]="值"Scrapy核心操作:命令与解析弎(2)项目设置Scrapy中项目的设置通过settings.py文件,通过指定项目属性和属性值定义设置项目,包括项目名称设置、并发请求设置、爬虫中间件设置等。Scrapy核心操作:命令与解析弎(3)通用参数设置通用spider参数参数描述scrapy.Spider通用SpiderCrawlSpider指定规则爬取网站XMLFeedSpider通过迭代节点分析XML内容Scrapy核心操作:命令与解析弎(1)XPath选择器3文本解析符号和方法描述nodeName选取此节点的所有节点/根节点//选择文档中的所有匹配节点.当前节点..当前节点的父节点@选取属性*匹配任何元素节点@*匹配任何属性节点Node()匹配任何类型的节点text()获取文本内容Xpath路径表达式包含符号和方法Scrapy核心操作:命令与解析弎在Scrapy中,路径表达式通过xpath()方法应用。语法格式:importscrapy#从scrapy.selector中导入Selectorfromscrapy.selectorimportSelectorclassMyspiderSpider(scrapy.Spider):name='MySpider'allowed_domains=['域名列表']start_urls=['网址列表']defparse(self,response):#构造Selector实例sel=Selector(response)#解析HTMLxpath=sel.xpath('表达式')pass使用Scrapy框架完成新闻公告页面数据采集与存储弎

在Scrapy中,CSS路径表达式通过css()方法应用。(2)CSS选择器语法格式:importscrapy#从scrapy.selector中导入Selectorfromscrapy.selectorimportSelectorclassMyspiderSpider(scrapy.Spider):name='MySpider'allowed_domains=['域名列表']start_urls=['网址列表']defparse(self,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论