爬虫基本原理
爬虫基本原理
- 1.1获取网页
- 1.1.1提取信息
- 1.1.2保存数据
- 1.2请求
- 1.2.1 请求方法
- 1.2.2 请求网址
- 1.2.3 请求头
- 1.2.4请求体
- 1.3响应
1.1获取网页
爬虫首先要做的工作就是获取网页,这里就是获取网页的源代码。源代码里包含了网页的部分有用信息,所以只要把源代码获取下来,就可以从中提取想要的信息了。
1.1.1提取信息
获取网页源代码后,接下来就是分析网页源代码,从中提取我们想要的数据。
另外,由于网页的结构有一定的规则,所以还有一些根据网页节点属性、cSS 选择器或 XPath 来提取网页信息的库,如 Beautifulsoup、pyquery、lxml等。使用这些库,我们可以高效快速地从中提取网页信息,如节点的属性、文本值等。
提取信息是爬虫非常重要的部分,它可以使杂乱的数据变得条理清晰,以便我们后续处理和分析数据。
1.1.2保存数据
提取信息后,我们一般会将提取到的数据保存到某处以便后续使用。这里保存形式有多种多样,如可以简单保存为TXT文本或了SON文本,也可以保存到数据库,如 MysQL和 MongoDB等,也可保存至远程服务器,如借助 SFTP进行操作等。
- 向起始url发送请求,并获取响应
- 对响应进行提取
- 如果提取url,则继续发送请求获取响应
- 如果提取数据,则将数据进行保存
1.2请求
请求由客户端向服务端发出,可以分为四个内容:请求方法、请求的网址、请求头、请求体。
1.2.1 请求方法
GET:请求页面,并返回页面内容
HEAD:类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头
POST:大多用于提交表单或上传文件,数据包含在请求体中
PUT:从客户端向服务器传送的数据取代指定文档中的内容
DELETE:请求服务器删除指定的页面
CONNECT:把服务器当作跳板,让服务器代替客户端访问其他网页
OPTIONS:允许客户端查看服务器的性能
TRACE:回显服务器收到的请求,主要用于测试或诊断
1.2.2 请求网址
请求的网址,即统一资源定位符URL,它可以唯一确定我们想请求的资源。
https://www.baidu.com/s?wd=python
https表示协议
www.baidu.com表示域名
s表示路径
wd=python表示查询参数
1.2.3 请求头
右键页面,检查,网络,然后点XHR,刷新页面,然后点击“headers”,找到请求标头。
接下来解释每一行都代表什么:
:Authority::请求的目标服务器的主机名或IP地址,这里是api.bilibili.com。
:Method::HTTP请求方法。这里是GET,表示获取资源。
:Path::请求的路径。这里是/x/web-interface/cdn/report?from=report。
:Scheme::请求的协议方案。这里是https,表示使用HTTPS协议进行通信。
Accept::客户端可接受的响应内容类型。这里是*/*,表示接受任意类型的响应。
Accept-Encoding::客户端可接受的响应内容编码方式。这里是gzip, deflate, br,表示支持gzip、deflate和br(Brotli)压缩方式。
Accept-Language::客户端可接受的语言类型。这里是zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,表示首选中文(中国大陆), 其次中文, 最后英文(美国)。
Cache-Control::控制缓存行为的指令,这里是no-cache,表示不使用缓存。
Origin::指定请求的来源,这里是https://www.bilibili.com。
Pragma::与缓存相关的指令,这里是no-cache,表示不使用缓存。
Referer::指定请求的来源页面或链接地址,这里是https://www.bilibili.com/。
Sec-Ch-Ua::指定浏览器的User-Agent字符串,表示浏览器及其版本信息。
Sec-Ch-Ua-Mobile::指定浏览器是否是移动版。
Sec-Ch-Ua-Platform::指定浏览器运行的平台,这里是Windows。
Sec-Fetch-Dest::指定请求的资源类型,这里是empty,表示空资源。
Sec-Fetch-Mode::指定请求的模式,这里是cors,表示使用CORS(跨源资源共享)请求。
Sec-Fetch-Site::指定请求的站点类型,这里是same-site,表示同源站点。
User-Agent::浏览器或客户端的用户代理标识,用于标识客户端的软件和版本信息。这里是Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36,表示使用的是Windows操作系统下的Chrome浏览器。
1.2.4请求体
请求体一般承载的内容是POST请求中的表单数据,但是对于GET请求,请求体为空。
先找到请求方法为POST的页面:
然后在载荷中找到相应的表单数据:
表单数据代表了每次进行访问所需要带的请求参数。
如果是GET请求带了载荷的话,那都会在URL中进行体现,比如:
可以发现,Payload中的report参数在请求的URL中体现了出来。
1.3响应
响应的状态码在头部就可以看到,以下是相应状态码及其解释:
- 1xx(信息性状态码):表示请求已被接收,需要进一步处理。
100 Continue:服务器已接收到请求的起始部分,客户端应继续发送剩余的请求。
101 Switching Protocols:服务器将按照客户端请求的协议切换。 - 2xx(成功状态码):表示请求已成功处理并得到响应。
200 OK:请求成功,正常返回结果。
201 Created:请求成功,并在服务器上创建了新的资源。
204 No Content:请求成功,但响应中不包含实体的主体部分。 - 3xx(重定向状态码):表示需要进一步操作以完成请求。
301 Moved Permanently:请求的资源已永久移动到新位置。
302 Found:请求的资源临时移动到不同的位置。
304 Not Modified:客户端的缓存资源是最新的,不需要重新传输。 - 4xx(客户端错误状态码):表示请求包含错误或无法完成请求。
400 Bad Request:请求无效,服务器无法理解。
401 Unauthorized:请求需要身份验证。
403 Forbidden:服务器拒绝访问请求的资源。 - 5xx(服务器错误状态码):表示服务器无法完成请求。
500 Internal Server Error:服务器遇到了意外错误,无法完成请求。
502 Bad Gateway:作为代理或网关的服务器收到无效响应。
503 Service Unavailable:服务器暂时无法处理请求,通常是由于过载或维护。
相关文章:

爬虫基本原理
爬虫基本原理 1.1获取网页1.1.1提取信息1.1.2保存数据 1.2请求1.2.1 请求方法1.2.2 请求网址1.2.3 请求头1.2.4请求体1.3响应 1.1获取网页 爬虫首先要做的工作就是获取网页,这里就是获取网页的源代码。源代码里包含了网页的部分有用信息,所以只要把源代…...

常见电子元器件和电路
目录 常见电子元器件一览表(字母标志)NTC(负温度系数热敏电阻)压敏电阻X2电容(抑制电源电磁干扰用电容器)泄放电阻共模电压共模电感整流桥滤波电容RCD吸收二极管Y电容整流器的原理输出整流肖特基二极管 功率晶体管(GTR,三极管)双极型晶体管(BJTÿ…...
English Learning - L3 Lesson1 VOA-Color 译文
听碎 VOA NOW, THE VOA SPECIAL ENGLISH PROGRAM WORDS AND THEIR STORIES Every people has its own way of saying things, its own special expressions. Many everyday American expressions are based on colors. 各国人民都有自己说话的方式,有自己独特的表…...

如何在linux中配置JDK环境变量
在linux系统部署皕杰报表,因皕杰报表是一款纯java报表工具,运行时需要jre环境,所以要在服务器上配置三个jdk环境变量path、classpath、JAVA_HOME。 那么为什么要配置jdk环境变量呢?因为java软件运行时要用到一些java命令ÿ…...

横截面收益率(二) 阿尔法策略是如何构建的
资本资产定价模型自从首次被提出以来在金融经济学中一直处于中心地位。 在一系列简化假定条件下,资本资产定价模型表明,任何证券的收益率与该证券 的系统性风险(或者贝塔值)呈线性关系。因此,依据资本资产定价模型横截…...
【ConfluxNews】2023.5.15 警惕任何未经合约审计的项目
1.【网络状态】当前版本V2.2.3,全网算力≈8T,昨日交易次数20K,昨日新增账户0.17K,昨日新增合约0个; 2.【POS参数】总锁仓275M,节点总数284,年利率13.7%(理论计算)&#x…...

MySQL学习---17、MySQL8其它新特性
1、MySQL新增特性 1.1 更简便的NoSQL支持 NoSQL泛指非关系型数据库和数据存储。随着互联网平台的规模飞速发展,传统的关系型数据库已经越来越不能瞒住需求。从5.6版本开始,MySQL就开始支持简单的NoSQL存储功能。MySQL 8对这一功能做了优化,…...

快速入门matlab——变量练习
学习目标:1.掌握matlab编程中最常用的几种变量类型 2.对变量类型的属性有所熟悉,不要求记忆,知道了解即可 3.要求熟练运用这几种变量类型创建自己的变量 clear all; % 清除Workspace中的所有…...

c++ 11标准模板(STL) std::set(三)
定义于头文件 <set> template< class Key, class Compare std::less<Key>, class Allocator std::allocator<Key> > class set;(1)namespace pmr { template <class Key, class Compare std::less<Key>> using se…...
ChatGPT详细介绍
ChatGPT: 自然语言处理的强大工具 ChatGPT是一种基于人工智能的自然语言处理模型,它是由OpenAI开发的一款先进的语言模型。ChatGPT基于GPT-3.5架构,具有强大的语言生成和理解能力。它被设计用于与人类进行自然对话,并提供广泛的应用场景。 …...
【算法】【算法杂谈】让[0,x)区间上的出现概率变为x^k
目录 前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本 思考感悟写在最后 前言 当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识! 问题介…...
【2023华为OD笔试必会25题--C语言版】《21 对称美学》——字符串、递归
本专栏收录了华为OD 2022 Q4和2023Q1笔试题目,100分类别中的出现频率最高(至少出现100次)的25道,每篇文章包括原始题目 和 我亲自编写并在Visual Studio中运行成功的C语言代码。 仅供参考、启发使用,切不可照搬、照抄,查重倒是可以过,但后面的技术面试还是会暴露的。✨✨…...

为减少来自环境使用的无线传感器网络的传输次数而开发的方法(Matlab代码实现)
目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨💻4 Matlab代码 💥1 概述 随着无线传感器网络(Wireless Sensor Network,WSN)的广泛应用,业界开始应用环境能量收集技术解决传感器节点的能量补充问题。而…...

springboot+vue滴答拍摄影项目(源码+文档)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的滴答拍摄影项目。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风歌…...
SQL基础培训13-索引和优化
进度13-索引和优化-SQL基础培训 知识点: 你可以把索引理解为一种特殊的目录。索引分聚集索引(clustered index,也称聚类索引、簇集索引) 和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。 1、聚集索引 以汉语字典举例,汉语字典有部首目录和检字表,还…...
拥抱5G发展机遇,从边缘计算上车
随着5G技术的逐渐普及和应用,边缘计算成为了当前信息技术领域的热门话题。边缘计算是指将计算和数据存储移动到网络的边缘,即源站以外的网络设备。与云计算相比,边缘计算更加贴近数据生成和处理的实时应用场景,具有更高的性能和更…...

“前端”工匠系列(二):合格的工匠,怎么做好价值落地 | 京东云技术团队
一、“技术鄙视链?” 如果你是一个技术人,相信都知道技术圈有个相互的鄙视链,这个链条从技术人自己认知的角度在以业务价值为中心嵌套的一层一层的环,就像洋葱,具体的描述这里不赘述了。 出门左拐随便抓住一个人问一…...

Oracle11g下载与安装
一、Oracle11g下载 官网下载地址:Oracle Database 11g Release 2 for Microsoft Windows (x64) 选择"Accept License Agreement",点击"win64_11gR2_database_1of2.zip"和"win64_11gR2_database_2of2.zip",进行…...
考研复试-软件工程
什么是软件工程?主要的方法?软件工程三要素?软件的生命周期?组成部分?软件过程的定义软件需求分析的任务软件开发过程的常见模型结构化设计方法,结构化分析方法软件测试的目的?分类?…...
软件测试选择题
下列选项中,哪一项不是软件开发模型(A) A、V模型 B、快速模型 C、螺旋模型 D、敏捷模型 下列选项中,哪一项不是影响软件质量的因素(C) A、需求模糊 B、缺乏规范的文档指导 C、使用新技术 D、开发人…...

4G无线网络转串口模块 DTU-1101
4G无线网络转串口模块概述 4G无线网络转串口模块是一种工业通信设备,通过4G网络将串口(如RS232/RS485)设备接入互联网,实现远程数据传输与控制。适用于物联网(IoT)、工业自动化、远程监控等场景。 核心功能…...
解决transformers.adapters import AdapterConfig 报错的问题
需要安装 Adapter-Hub 的 transformers 分支,不是官方 transformers 库! pip install githttps://github.com/Adapter-Hub/transformers.git✅ 注意:这个命令会从 GitHub 下载源码并安装。你需要确保你的网络可以访问 GitHub,并且…...

软件更新机制的测试要点与稳定性提升
💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...
delphi7 链表 使用方法
在 Delphi 中,链表是一种常见的数据结构,用于存储一系列的元素,其中每个元素都包含一个指向列表中下一个元素的引用。在 Delphi 7 中,你可以手动实现链表,或者使用一些现有的集合类,例如 TList 或者 TLinke…...

西门子 S7-1200 PLC 海外远程运维技术方案
西门子 S7-1200 PLC 海外远程运维技术方案 一、面向海外场景的核心优势 针对跨国企业、海外项目及远程技术支持需求,本方案基于巨控GRM552Y-CHE模块提供无缝的全球化远程PLC运维能力,突破地域及时差限制,显著提升国际项目响应效率。 二、海…...

行为型设计模式之Interpreter(解释器)
行为型设计模式之Interpreter(解释器) 前言: 自己的话理解:自定义一个解释器用来校验参数或数据是否合法。 1)意图 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解…...

rknn优化教程(一)
文章目录 1. 前述2. 优化思想2.1 实时帧率2.2 多线程处理2.2.1 排序2.2.2 批量处理2.2.3 队列 2.3 进一步优化 3. 代码 1. 前述 OK,铺垫了很久的rknn优化,终于开始写了。为什么要优化呢?当然是我们的使用遇到了瓶颈,要么使用的时…...
Linux 的 find 命令使用指南
精通 Linux 的 find 命令:终极使用指南 在 Linux 系统中,find 命令是文件搜索的瑞士军刀,它能基于多种条件在目录树中精准定位文件。无论你是系统管理员还是开发者,掌握 find 都能极大提升工作效率。本文将深入解析 find 的核心用法,并附赠实用示例! 一、基础语法结构 …...

[文献阅读] Emo-VITS - An Emotion Speech Synthesis Method Based on VITS
[文献阅读]:An Emotion Speech Synthesis Method Based on VITS 在VITS基础上通过参考音频机制,获取情感信息,从而实现的情感TTS方式。 摘要 VITS是一种基于变分自编码器(VAE)和对抗神经网络(GAN…...
.Net Framework 4/C# 泛型的使用、迭代器和分部类
一、泛型的使用 泛型是用于处理算法、数据结构的一种编程方法。泛型的目标是采用广泛适用和可交互性的形式来表示算法和数据结构,以便它们能够直接用于软件构造。 泛型简单理解就是,在声明时暂时不固定其类型,例如 int 类型、double 类型等,在调用泛型时,再将要用的类型补…...