# python-scrapy-muke **Repository Path**: lvzhenchao/python-scrapy-muke ## Basic Information - **Project Name**: python-scrapy-muke - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-12-28 - **Last Updated**: 2025-01-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 备注:每个单独的项目记得创建自己的本项目解释器 ## 9、xpath语法 ### 9-1、提取网页数据的方式 - css选择器 - xpath选择器 - 正则表达式 #### 9-1-1、xpath下载 - pip install lxml - pip install lxml --upgrade - pip install reinstall lxml - 要求:语法尽可能简单 #### 9-1-2、节点概念 - 顶级标签:HTML - 一个点.代表当前标签,例如在a标签的子级中找div: a.xpath(./div) - 两个点..代表父级,例如a的父级:a.xpath(./..) ##### 9-1-2-1、切换节点位置【点最多是两个,斜杆最多也是两个】 - div是span的父级:div/span - 查看span的父级:span/.. - div的子孙级:div// - 建议写法:.//开始 #### 9-1-3、contains函数应用 - 检测包含 ### 9-2、相关补充说明 - normalize-space函数:剔除不可见数据,谨慎使用 - 原始数据尽可能保留一份【html】 ## 11、Scrapy框架 - 安装:pip install scrapy - 测试命令:scrapy shell http://www.spbeen.com ``` 1、spiders/: 定义爬虫文件,负责抓取目标网页的内容并提取数据。 2、items.py: 定义数据结构,确保提取的数据有统一的字段规范。 3、pipelines.py: 对爬取的数据进行后处理(如清洗、存储)。 4、middlewares.py: 定义中间件,用于修改请求或响应的行为(如代理、请求头)。 5、settings.py: 配置项目运行时的全局参数(如并发数、延迟、管道等)。 ``` ### 11-1、Scrapy重要组件 - 爬虫组件:Spiders负责网页的解析规则和数据提取 - 管道组件:ItemPipelines负责数据的入库 - 请求中间件:RequestMiddleWare负责请求参数 - 下载器:DownloadMiddleware负责发送请求和接收响应 - 爬虫中间件:SpiderMiddleware负责爬虫请求响应的管理 - 调度器:Scheduler负责请求的处理顺序 ### 11-2、Scrapy基本模块介绍 - 爬虫组件:负责发送请求、接收响应、解析内容 - 管道组件:负责将数据内容存储到指定位置 ### 11-3、工作流程 - 启动:scrapy crawl xxspider - 执行:xxspider开始执行,负责第一个请求出去 - 处理:拿到响应内容,解析请求和提取数据,返回 ### 11-4、命令介绍 - 命令:scrapy genspider -t template name domain - 解释:按照模版格式创建爬虫文件 ### 11-4-1、内置模版类型 - basic:基础的爬虫模版文件 - crawl:网址匹配的爬虫模版文件 - xmlfeed/csvfeed:xml和csv格式的爬虫模版文件 ### 11-4-2、scrapy命令 - 新建项目:scrapy startproject 名称 - 新建爬虫:scrapy genspider -t template 模版 名称 domain - 启动爬虫:scrapy crawl 名称 - 调试:scrapy shell domain - 查看版本:scrapy version - 性能检测:scrapy bench - 补充:进入到创建的项目中:newsproject & scrapy ### 11-5、项目demo - 命令行创建一个项目:scrapy startproject FirstProject - 进入到项目中:scrapy genspider fisrt spbeen - 命令行启动爬虫,正常执行并输出日志:scrapy crawl fisrt ### 11-6、单步调试 - 命令启动:只用爬虫日志输出;无法介入单步调试 - 解决方案:使用os包执行命令scrapy crawl,编辑器启动脚本,实现调试模式介入 #### 11-6-1、单步调试流程 - 单看run.py文件:自己创建的文件 ## 12、项目说明 - 项目要求 - 技术需求 - 数据要求 ### 12-1、项目要求 - 使用scrapy框架抓取目标站的接口数据 - 目标站 ### 12-2、技术要求 - 必须使用scrapy框架结构编写爬虫项目 - 使用爬虫组件,至少请求或获取10个数据 - 使用管道组件,将数据存储到本地文件中,使用txt文件格式 ### 12-3、数据要求 - 获取某个省10天连续数据 - 单条数据:格式 ### 12-3、代码实践 - 创建项目:scrapy startproject ncovdata - 创建爬虫:scrapy genspider -t basic ncov ncovdata.spbeen.com - 启动项目:scrapy crawl ncov - 使用脚本启动脚本:run.py - 分析scrapy输出日志 #### 12-3-1、分析scrapy输出日志 - 结构说明 ``` 顶部:版本信息、项目结构信息 中部:日志输出,例如下载器组件的请求记录等 底部:爬取过程的统计记录,包含请求和失败的次数 ``` ### 12-4、编写包虫任务 - 请求接口并拿到接口数据,多多益善 - 解析接口数据,转成python的字典对象 - 从目标json内容中提取所需数据 - 补充:编辑器的debug方式,response.json().get('data') ### 12-5、pipeline管道存储数据 #### 12-5-1、任务说明 - 配置settings.py代码,启用管道文件:DOWNLOADER_MIDDLEWARES - 使用管道文件接收item,并输出 - 将item的数据惊醒存储到本地的txt文件中:文件的编码,格式 ### 12-6、项目总结 - starts_urls是类属性,需要方法去单独去和发起请求 - start_requests是爬虫函数之一,可以重构并发起请求 - scrapy项目中流通的结构,requests和item #### 12-6-1、管道部分 - 支持多管道注册,按数值大小排序 - 每个管道需要返回item,否则后续管道无法接收数据 ## 13、中间件的类型 - 爬虫中间件【内置5个】 - 下载器中间件【内置11个】 - 补充:管道【内置3个】 ### 13-1、爬虫中间件 - 爬虫处理后的对象,都需要经过爬虫中间件后再传出 - 负责爬虫的行为规范 #### 13-1-1、爬虫中间件下载器中间件 - 爬虫将请求丢给下载器,需要经过下载器中间件 - 下载器接收响应并反爬虫,需要经过下载器中间件 - 下载器中间件负责对请求和响应的预处理 #### 13-1-2、爬虫中间件中间件的内置函数 - process_request:处理请求 - process_response:处理响应 - process_exception:处理异常 #### 13-1-3、爬虫中间件中间件的信号函数 - def from_crawler(cls, crawler):类方法,传递爬虫信号 - spider_opened:爬虫启动时通过信号传递并调用的方法 ### 13-2、爬虫中间件内置中间件 #### 13-2-1、HttpErrorMiddleware - 负责解析响应的状态吗,判断状态以及执行对应的操作 - 操作:200成功;301再次请求;400失败重试等 #### 13-2-2、OffsiteMiddleware - 读取请求的网址,并对比爬虫的allowed_domains - 在允许范围内,则允许请求;不在范围内则丢弃请求【例如会有广告跳转出去的网址】 #### 13-2-3、RefererMiddleware - 解析请求,并自动读取和标记请求的Referer字段 - 模拟浏览器,自动跟进Referer字段的内容更新 #### 13-2-4、UrlLengthMiddleware - 读取请求的网址,统计请求网址的长度 - 通常是没有长度限制的可以自行设置 #### 13-2-5、DepthMiddleware - 读取并记录请求的深度值,方便对深度进行限制 - 关键词:DEPTH_LIMIT ## 14、下载器中间件 - 写的更多一点 ### 14-1-1、下载器中间件的信号函数 - 信号函数:def from_crawler(cls, crawler):类方法,传递爬虫信号 - spider_opened:爬虫启动时通过信号传递并被调用的方法【中间件处理请求的预操作】 ### 14-1-2、下载器中间件的内置函数 - process_request:处理请求 - process_response:处理响应 - process_exception:处理异常 #### 14-1-2-1、process_request函数的返回值 - 正常情况:None、Request、Response - 异常情况:IgnoreRequest->process_exception #### 14-1-2-2、process_response函数的返回值 - 正常情况:Request、Response - 异常情况:IgnoreRequest->process_exception #### 14-1-2-3、process_exception函数的返回值 - 正常情况:None、Request、Response - 异常情况:无 ### 14-2、下载器中间件【11个】 #### 14-2-1、HttpAuthMiddleware - 负责http请求头的认证信息,例如代理、账号密码等信息 #### 14-2-2、DownloadTimeMiddleware - 设置请求的等待时间,默认180秒 #### 14-2-3、DefaultHeadersMiddleware - 默认的请求头字段信息,settings.py可以选择设置 #### 14-2-4、UsersAgentMiddleware【重点】 - 用户代理信息,专门存放浏览器和系统内核信息 - 常用固定的UserAgent和变化的UserAgent #### 14-2-5、RetryMiddleware - 下载器重试中间件,负责重新请求失败的响应,默认3次 #### 14-2-6、MetaRefreshMiddleware - 自动处理基于meat-refresh html重定向的响应内容 #### 14-2-7、HTTPCompressionMiddleware - 主动压缩与目标相互发送和接受的HTTP包 #### 14-2-8、RedirectMiddleware - 基于响应状态信息,自动处理需要跳转的响应 #### 14-2-9、CoolieMiddleware【重点】 - 模拟浏览器的网站Cookie管理,并跟踪Request添加cookie - Cookie可以包含很多信息,例如账户登录信息和广告等 - 主动跟踪响应,并自动配置响应和请求Cookie - 默认自动开启,并跟踪Cookie的变化和设置 - 自动处理Cookie时,不支持手动添加的Cookie #### 14-2-10、HttpProxyMiddleware - 通过请求的proxy字段来给请求添加代理信息 #### 14-2-11、DownloadStatsMiddleware - 存储统计信息,包括请求、响应和异常处理的数量等