Scrapy 爬虫框架

网络爬虫框架scrapy

(配置型爬虫)

什么是爬虫框架?

  • 爬虫框架是实现爬虫功能的一个软件结构和功能组件集合
  • 爬虫框架是个半成品,帮助用户实现专业网络爬虫

scrapy框架结构("5+2"结构)

  1. spider:
  • 解析downloader返回的响应(Response)
  • 产生爬取项(scraped item)
  • 产生额外的爬去请求(Request) 需要用户编写配置代码
  1. engine(引擎):
  • 控制所有模块之间的数据流
  • 根据条件触发事件 不需要用户修改
  1. scheduler(调度器):
  • 对所有爬取请求进行调度处理 不需要用户修改
  1. downloader(下载器):
  • 根据请求下载网页 不需要用户修改
  1. item pipelines():
  • 以流水线处理spider产生的爬取项
  • 由一组操作顺序组成,类似流水线,每个操作是一个Item Pipeline类型
  • 可能操作包括:清理、检验和查重爬取项中的HTML数据,将数据存储到数据库中 需要用户编写配置代码
  1. downloader middleware(中间件):
  • 目的:实施engine、scheduler和downloader之间进行用户可配置的控制
  • 功能:修改、丢弃、新增请求或响应 用户可以编写配置代码
  1. spider middleware(中间件):
  • 目的:对请求和爬去项的再处理
  • 功能:修改、丢弃、新增请求或爬取项 用户可以编写配置代码

数据流

  • 1.Engine从Spider处获得爬取请求(Request)
  • 2.Engine将爬取请求转发给Scheduler,用于调度
  • 3.Engine从Scheduler处获得下一个爬取的请求
  • 4.Engine将爬取请求通过中间件发送给Downloader
  • 5.爬取网页后,Downloader形成响应(Response),通过中间件(Middleware)发给Engine
  • 6.Engine将收到的响应通过中间件发送给Spider处理
  • 7.Spider处理响应后产生爬取项(scraped item)和新的爬取请求(Requests)给Engine
  • 8.Engine将爬取项发送给Item Pipeline(框架出口)
  • 9.Engine将爬取请求发送给Scheduler

  • Engine控制各模块数据流,不间断从Scheduler处获得爬取请求,直到请求为空
  • 框架入口:Spider的初始爬取请求
  • 框架出口:Item Pipeline

scrapy命令行

格式

scrapy <command> [options] [args]

** 常用命令 **

命令说明格式
startproject创建一个新工程scrapy startproject [dir]
genspider创建一个爬虫scrapy genspider [options] [domain]
settings获得爬虫配置信息scrapy settings [options]
crawl运行一个爬虫scrapy crawl
list列出工程中所有的爬虫scrapy list
shell启动URL调试命令行scrapy shell [url]

demohttps://python123.io/ws/demo.html

创建工程

scrapy startproject python123demo

创建爬虫

scrapy genspider demo python123.io
//生成了一个名为demo的spider
//在spider目录下增加代码文件demo.py(该文件也可以手工生成)

** demo.py文件 **

# -*- coding: utf-8 -*-
import scrapyclass DemoSpider(scrapy.Spider):name = 'demo'allowed_domains = ['python123.io']start_urls = ['http://python123.io/']def parse(self, response):pass

配置产生的spider爬虫

# -*- coding: utf-8 -*-
import scrapyclass DemoSpider(scrapy.Spider):name = 'demo'#allowed_domains = ['python123.io']start_urls = ['http://python123.io/ws/demo.html']def parse(self, response):#存储文件名demo.htmlfile_name = response.url.split('/')[-1]with open(file_name,"wb") as f:f.write(response.body)self.log('Saved file %s' % file_name)#日志

*** 另一个版本 **

# -*- coding: utf-8 -*-
import scrapyclass DemoSpider(scrapy.Spider):name = 'demo'#allowed_domains = ['python123.io']#start_urls = ['http://python123.io/ws/demo.html']def start_requests(self):urls = ['http://python123.io/ws/demo.html']for url in urls:yield scrapy.Request(url=url, callback=self.parse)def parse(self, response):#存储文件名demo.htmlfile_name = response.url.split('/')[-1]with open(file_name,"wb") as f:f.write(response.body)self.log('Saved file %s' % file_name)#日志

运行爬虫

scrapy crawl demo

Scrapy爬虫数据类型

  • Request类
  • Response类
  • Item类

Request类

class scrapy.http.Request()
  • Request对象表示一个HTTP请求
  • 由Spider生成,由Downloader执行
属性方法
.urlRequests对应的请求URL地址
.method对应的请求方法,'GEt'、'POST'等
.headers字典类型风格的请求头
.body请求内容主体,字符串类型
.meta用户添加的扩展信息,在Scrapy内部模块间传递信息使用
.copy复制该请求

Response类

class scrapy.http.Response()
  • Response对象表示一个HTTp响应
  • 由Downloader生成,由Spider处理
属性或方法说明
.urlResponse对应的URL地址
.statusHTTP状态码,默认是200
.headersResponse对应的头部信息
.bodyResponse对应的内容信息,字符串类型
.flags一组标记
.request产生Response类型对应的Request对象
.copy()复制该响应

Item类

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

Scrapy爬虫的使用步骤

  1. 创建一个工程和Spider模板
  2. 编写Spider
  3. 编写Item Pipeline
  4. 优化配置策略

scrapy爬虫信息提取方法

  • Beautifui Soup
  • lxml
  • re
  • XPath Selector
  • CSS Selector

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

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

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

相关文章

BM1684X搭建sophon c++环境

1:首先安装编译好sophon-sail 比特大陆BM1684X开发环境搭建--SOC mode-CSDN博客 2:在将之前配置的soc-sdk拷贝一份到sdk根目录&#xff0c;将交叉编译好的sail中的build_soc拷贝至soc-sdk文件夹内&#xff1b; cp -rf build_soc/sophon-sail/inlcude soc-sdk cp -rf build_soc…

国创证券|沪指、深指、创指、科创50、北证50都是什么意思?

股票指数能够反映股票商场的全体价格变化状况&#xff0c;包含股票的平均价格或市值的变化。出资者能够经过股票指数来了解多种股票的价格变化&#xff0c;从而检测自己的出资作用&#xff0c;预测股市的动向。下面&#xff0c;国创证券就为咱们介绍下常用的股票指数。 1、上证…

Liunx文件系统和基础IO

文件系统和基础IO 基础IOc语言基础IO函数当前路径和标准流系统IO系统调用函数重定向FILE文件结构体 在谈缓存区问题理解文件系统初识inode 基础IO c语言基础IO函数 打开与关闭 FILE *fopen(char *filename, const char *mode);选项还可以是 r/w/a 意味着为可读可写打开。 2…

2024年共享WiFi项目到底怎么样?

共享WiFi项目是近年来兴起的一种新型商业模式&#xff0c;商家通过在自己店铺升级wifi链接模式使其数字化&#xff0c;让用户能够方便地连接到互联网&#xff0c;提升到店体验&#xff0c;增加线上引流。这一项目的出现&#xff0c;为人们的生活带来了诸多便利&#xff0c;同时…

青少年软件编程(图形化)等级考试试卷(三级)

青少年软件编程&#xff08;图形化&#xff09;等级考试试卷&#xff08;三级&#xff09; 分数&#xff1a;100 题数&#xff1a;38 总体情况姓名开始时间结束时间用时(分钟)得分得分率是否通过考试状态xXx2023-03-192023-03-1959.5769.50.7Y已评卷 一、单选题(共25题&#x…

一篇文读懂如何设计系统间数据对接传输

如果一个系统特别外向&#xff0c;喜欢与周边的系统互动&#xff0c;乐于参与交流&#xff0c;成为了一个热门的“社交明星”&#xff0c;那么它基本上扮演的是中台的角色。 但实际上&#xff0c;大多数系统都处于两种极端之间。就像人类社会一样&#xff0c;既需要自己生产&am…

使用零一万物 200K 模型和 Dify 快速搭建模型应用

本篇文章&#xff0c;我们聊聊如何使用 LLM IDE (Dify) 快速搭建一个模型应用&#xff0c;以及使用超长上下文的 200K 模型&#xff0c;完成懒人式的电子书翻译。 准备工具 最近在 GitHub 上看到了前 HuggingFace 员工&#xff0c;前 transformers 核心贡献者之一的 Stas Bek…

windows下如何编译tengine

前言: 本文的主要宗旨是使用cygwin在windows下编译tengine, 同时使用tongsuo, 使tengine支持国密SSL. 本文的编译环境为win10专业版. 详细步骤如下. 1, 安装cygwin https://cygwin.com/setup-x86_64.exe 安装步骤比较简单, 主要步骤如下: 下一页在选择站点的时候可以填写清华源…

当运维深陷“困境”,如何“破旧立新”?

背景 先来看下运维小伙伴们遇到的几种境遇&#xff1a; 投产变更&#xff0c;流程流于形式 投产步骤特别复杂&#xff0c;几百套系统几百种投产方式&#xff0c;公司的测试环境流于形式&#xff0c;经常会有投产文档和真实操作不一致的情况 几百套系统&#xff0c;几十种操作…

Maya 切换面选择模式

文章目录 切换面选择模式 切换面选择模式 maya默认的面选择模式是点击面选择面&#xff0c;但是这种模式下&#xff0c;在线框显示时我们会不知道哪里有面&#xff0c;我们更希望点击面的中心点选择面&#xff0c;就像下图&#xff0c;哪里有面一目了然 设置方法 这里可以切…

【漏洞复现】大华智慧园区综合管理平台video文件上传漏洞

Nx01 产品简介 大华智慧园区综合管理平台是一款综合管理平台&#xff0c;具备园区运营、资源调配和智能服务等功能。该平台旨在协助优化园区资源分配&#xff0c;满足多元化的管理需求&#xff0c;同时通过提供智能服务&#xff0c;增强使用体验。 Nx02 漏洞描述 大华智慧园区…

【基础知识】DDPM中的解码器部分“L0“解释以及概率密度函数的解释

1. 前言 看了很多关于DDPM的博客&#xff0c;都对原文中以上公式的 L 0 L_0 L0​没有涉及或者直接说将 L t − 1 L_{t-1} Lt−1​和 L 0 L_0 L0​合并起来讲&#xff0c;这样使得我对这段很困惑。所以&#xff0c;这篇博客我们主要来讲这个解码器 L 0 L_0 L0​部分。 在此&…