第1章 爬虫基础
目录
- 1. HTTP 基本原理
- 1.1 URI 和 URL
- 1.2 HTTP 和 HTTPS
- 1.3 请求
- 1.3.1 请求方法
- 1.3.2 请求的网址
- 1.3.3 请求头
- 1.3.4 请求体
- 1.4 响应
- 1.4.1 响应状态码
- 1.4.2 响应头
- 1.4.3 响应体
- 2. Web 网页基础
- 2.1 网页的组成
- 2.1.1 HTML
- 2.1.2 CSS
- 2.1.3 JavaScript
- 2.2 网页的结构
- 2.3 节点树及节点间的关系
- 2.4 选择器
- 3. 爬虫的基本原理
- 3.1 爬虫概述
- 3.1.1 获取网页
- 3.1.2 提取信息
- 3.1.3 保存数据
- 3.1.4 自动化程序
- 4. Session 和 Cookie
- 4.1 静态网页和动态网页
- 4.2 无状态 HTTP
- 4.3 Session
- 4.4 Cookie
- 4.4.1 Session 维持
- 4.4.2 属性结构
- 4.4.3 会话 Cookie 和持久 Cookie
1. HTTP 基本原理
1.1 URI 和 URL
-
URI:统一资源标识符
-
URL:统一资源定位符
-
http://localhost:8080/Study/test.jsp
-
指定了访问资源的唯一方式(访问协议、访问路径和资源名称)
-
-
URN:统一资源名称
-
urn:id:123456
-
只为资源命名,但不指定如何定位
-
-
-
URL的基本组成格式
scheme://[username:password@]hostname[:port][/path][;parameters][?query][#fragment]
-
scheme(protocol):协议
- 常用协议:hrrp、https、ftp等
-
username、password:用户名、密码
- 某些情况下 URL 需要提供用户名和密码才能访问
-
hostname:主机地址
- 可以是域名或 IP 地址
-
port:端口
-
http://localhost:8080
-
服务器设定的端口
-
-
path:路径
- 网络资源在服务器中的指定地址
-
parameters:参数
- 用来指定访问某个资源时的附加信息
-
query:查询
- 用来查询某类资源
- 如有多个查询,则用 & 隔开
-
fragment:片段
- 对资源描述的部分补充
- 两个主要应用
- 单页面路由:Vue、React 都可以借助它来做路由管理
- HTML 锚点:控制一个页面打开时自动下滑滚动到某个特定的位置
-
1.2 HTTP 和 HTTPS
- HTTP:超文本传输协议
- 把超文本数据从网络传输到本地路由器
- 能够保证高效而准确地传输超文本文档
- HTTPS:以安全为目标的 HTTP 通道
- 在 HTTP 下加入 SSL 层
- SSL 的主要作用
- 建立一个信息安全通道,保证数据传输的安全性
- 确认网站的真实性
1.3 请求
1.3.1 请求方法
-
用于标识请求客户请求服务端的方式
-
常见的请求方法:
- GET:在浏览器中直接输入 URL 并回车
- 请求的参数会直接包含到 URL 里
- POST:大多在提交表单时发起
- 数据通常以表单的形式传输,而不会体现在 URL 中
- GET:在浏览器中直接输入 URL 并回车
-
GET 和 POST 请求方法的区别
- GET
- 参数包含在 URL 中,数据可以在 URL 中看到
- 提交的数据最多只有1MB
- POST
- URL 不包含参数数据,数据都是通过表单形式传输,会包含在请求体中
- 对提交的数据没有大小限制
- GET
1.3.2 请求的网址
- 唯一确定客户端向请求的资源
1.3.3 请求头
- 用来说明服务器要使用的附加信息
- 常用的请求头信息
- Accept:请求报头域
- 用于指定客户端可接受哪些类型的信息
- Accept-Language:
- 用于指定客户端可接受的语言类型
- Accept-Encoding:
- 用于指定客户端可接受的内容编码
- Host:
- 用于指定请求资源的主机 IP 和端口号
- 内容为请求 URL 的原始服务器或网关的位置
- Cookie:
- 网站为了辨别用户,进行会话跟踪而存储在用户本地的数据
- 主要功能为维持当前访问会话
- 自动登录
- Referer:
- 用于标识请求是哪个页面发过来的
- User-Agent:
- 一个特殊的字符串头
- 使服务器识别客户端使用的操作系统及版本、浏览器及版本等信息
- Content-Type:互联网媒体类型(MIME 类型)
- 在 HTTP 协议消息头中
- 用来标识具体请求中的媒体类型信息
- text/html:HTML 格式
- image/gif:GIF 图片
- application/json:JSON 类型
- Accept:请求报头域
1.3.4 请求体
- 一般承载的内容是 POST 请求中的表单数据
- 对于 GET 请求,请求体为空
1.4 响应
1.4.1 响应状态码
- 表示服务器的响应状态
- 常见的状态码
- 200:服务器正常响应
- 404:页面未找到
- 500:服务器内部发生错误
1.4.2 响应头
- 包含了服务器对请求的应答信息
- 常用的响应头信息
- Date:
- 用于标识响应产生的时间
- Last-Modified:
- 用于指定资源的最后修改时间
- Content-Encoding:
- 用于指定响应内容的编码
- Server:
- 包含服务器的信息
- 名称、版本号等
- 包含服务器的信息
- Content-Type:文档类型
- 指定返回的数据类型
- Set-Cookie:设置 Cookie
- 用于告诉浏览器需要将此内容放在 Cookie 中,下次请求时将 Cookie 携带上
- Expires:
- 用于指定响应的过期时间
- 让代理服务器或浏览器将加载的内容更新到缓存中
- 当再次访问相同的内容时,就可以直接从缓存中加载
- Date:
1.4.3 响应体
- 响应的正文数据都存在于响应体中
2. Web 网页基础
2.1 网页的组成
2.1.1 HTML
- 超文本标记语言
- 网页的基础架构
2.1.2 CSS
- 层叠样式表
- 层叠:
- 当 HTML 中引用了多个样式文件,并且样式发生冲突时,浏览器能够按照层叠顺序处理这些样式
- 样式:
- 网页中的文字大小、颜色、元素间距、排列等格式
- 层叠:
2.1.3 JavaScript
- 脚本语言
- 实现了一种实时、动态、交互的页面功能
2.2 网页的结构
- 一个网页的标准形式是 html 标签内嵌套 head 标签和 body 标签
- head 标签内定义网页的配置和引用
- body 标签内定义网页的正文
2.3 节点树及节点间的关系
-
HTML节点树:HTML DOM 树
-
整个文档是一个文档节点
-
每个 HTML 元素是元素节点
-
HTML 元素内的文本是文本节点
-
每个 HTML 属性是属性节点
-
注释是注释节点
-
节点树中的节点彼此拥有层级关系
-
常用父(parent)、子(child)和兄弟(sibling)等术语用于描述这些关系
- 父节点拥有子节点
- 同级的子节点被称为兄弟节点
-
在节点树中,顶端节点被称为根(root)
-
每个节点都有父节点、除了根(它没有父节点)
-
一个节点可拥有任意数量的子节点或兄弟节点
2.4 选择器
- 在 CSS 中,使用 CSS 选择器来定位节点
3. 爬虫的基本原理
3.1 爬虫概述
3.1.1 获取网页
- 获取网页的源代码
3.1.2 提取信息
- 分析源代码,从中提取所需数据
3.1.3 保存数据
- 将提取到的数据保存到某处以便后续使用
3.1.4 自动化程序
- 代替人来完成上述操作
4. Session 和 Cookie
4.1 静态网页和动态网页
- 静态网页
- 网页的内容由 HTML 代码编写,文字、图片等内容均通过写好的 HTML 代码来指定
- 动态网页
- 动态解析 URL 中参数的变化,关联数据库并动态呈现不同的页面内容
4.2 无状态 HTTP
- HTTP 协议对事务的处理没有记忆能力
- 服务器不知道客户端处于什么状态
4.3 Session
- 会话
- 有始有终的一系列动作、信息
- Session 对象用来存储特定用户 Session 所需的属性及配置信息
- 当用户进行页面跳转时,存储在 Session 中的变量不会丢失
- 如果没有 Session ,Web 服务器会自动创建一个 Session 对象
- Session 过期后,服务器将终止该 Session
4.4 Cookie
4.4.1 Session 维持
- 客户端第一次请求服务器时,服务器会返回一个响应头中带有 Set-Cookie 字段的响应给客户端,这个字段用来标记用户
- 当下一次请求相同的网站时,把保存的 Cookie 放到请求头中一起提交给服务器
- Cookie 中携带着 SessionID 相关信息,服务器通过检查 Cookie 即可找到对应的 Session,进而通过判断 Session 辨认用户状态
4.4.2 属性结构
-
Name:
- Cookie 的名称
-
Value:
- Cookie 的值
-
Domain:
- 指定可以访问该 Cookie 的域名
-
Path:
- Cookie 的使用路径
-
Max-Age:
- Cookie 失效的时间
-
Size 字段:
- Cookie 的大小
-
HTTP 字段:
- Cookie 的 httponly 属性
- 若此属性为true,则只有在 HTTP Headers 中才会带有此 Cookie 信息,而不能通过脚本document.cookie来访问该 Cookie
-
Secure
- 是否仅允许使用安全协议传输 Cookie
4.4.3 会话 Cookie 和持久 Cookie
- 会话 Cookie
- 把 Cookie 放在浏览器内存中,关闭浏览器后,Cookie 即失效
- 持久 Cookie
- 把 Cookie 保存到客户端的硬盘中,下次还可以继续使用
相关文章:

第1章 爬虫基础
目录 1. HTTP 基本原理1.1 URI 和 URL1.2 HTTP 和 HTTPS1.3 请求1.3.1 请求方法1.3.2 请求的网址1.3.3 请求头1.3.4 请求体 1.4 响应1.4.1 响应状态码1.4.2 响应头1.4.3 响应体 2. Web 网页基础2.1 网页的组成2.1.1 HTML2.1.2 CSS2.1.3 JavaScript 2.2 网页的结构2.3 节点树及节…...
Python教程---序列--序列修改元素
下面和大家讲一下如何进行序列修改元素。 序列修改元素可以进行两个操作。如下: 方法1:通过下标元素来修改 方法2:通过del来删除元素 # 创建一个原始的列表 stus [张三,李四,王五,赵六,王麻子,小红]#通过下标来直接修改元素中的内容 stus[0] 张三123 stus[2] 哈哈#通过d…...

Linux 中的 ls 命令使用教程
目录 前言 如何运用 ls 命令 1、列出带有所有权的文件和目录 2、获取以人类可读的方式显示的信息 3、列出隐藏文件 4、递归列出文件 5、在使用 ls 时对文件和目录做区分 6、列出指定扩展名的文件 7、基于大小对输出内容排序 8、根据日期和时间排序文件 让我们来总结…...

Kubernetes基础入门:Kubernetes的有关概述
Kubernetes基础入门:Kubernetes的有关概述 一、摘要二、为什么需要 Kubernetes?三、Kubernetes 的功能架构 💖The Begin💖点点关注,收藏不迷路💖 一、摘要 随着云计算和容器技术的快速发展,现代…...
C# 无法将“int[]“类型隐式转换为“int?[]“,无法将“string[]“类型隐式转换为“string?[]“
在 C# 中,不能将 int[] 隐式转换为 int?[],因为它们是两种不同的类型。int[] 是一个整数数组,而 int?[] 是一个可空整数数组。要解决这个问题,你可以使用显式转换或创建一个新的可空整数数组。 两种解决方案供大家选择 // 示例…...
趣链科技,HyperChain
目录 趣链科技 HyperChain 产品介绍 CA认证即电子认证服务 趣链科技 趣链区块链平台Hyperchain-核心产品-趣链科技 趣链科技飞洛区块链服务开放平台...

吴恩达《机器学习》9-7-9-8:综合起来、自主驾驶
在神经网络的使用过程中,需要经历一系列步骤,从网络结构的选择到训练过程的实施。以下是使用神经网络时的主要步骤的小结: 一、网络结构的选择 输入层: 第一步是选择网络结构,即确定神经网络的层数以及每层的单元数。…...
HTTP/HTTPS
HTTP/HTTPS 简介 HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网( WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 HTTP 是一个基于 TCP/IP 通信协议来传递数据&a…...
C语言中#ifndef的头文件保护用法和宏定义用法
文章目录 头文件保护宏定义 #ifndef MY_HEADER_H #define MY_HEADER_H// 这里放置头文件的内容#endif // MY_HEADER_H#ifndef _error#define _error (-1) #endif这两个代码块分别用于不同的目的。 头文件保护 #ifndef MY_HEADER_H #define MY_HEADER_H// 这里放置头文件的内…...

141.【Git版本控制-本地仓库-远程仓库-IDEA开发工具全解版】
Git-深入挖掘 (一)、Git分布式版本控制工具1.目标2.概述(1).开发中的实际常见(2).版本控制器的方式(3).SVN (集中版本控制器)(4).Git (分布版本控制器)(5).Git工作流程图 (二)、Git安装与常用命令1.Git环境配置(1).安装Git的操作(2).Git的配置操作(3).为常用的指令配置别名 (可…...

OpenCV快速入门:移动物体检测和目标跟踪
文章目录 前言一、移动物体检测和目标跟踪简介1.1 移动物体检测的基本概念1.2 移动物体检测算法的类型1.3 目标跟踪的基本概念1.4 目标跟踪算法的类型 二、差值法检测移动物体2.1 差值法原理2.2 差值法公式2.3 代码实现2.3.1 视频或摄像头检测移动物体2.3.2 随机动画生成的移动…...

针对操作系统漏洞的反馈方法
一、针对操作系统漏洞的反馈方法 漏洞扫描指基于漏洞数据库,通过扫描等手段对指定的远程或者本地计算机系统的安全脆弱性进行检测,发现可利用漏洞的一种安全检测(渗透攻击)行为。在进行漏洞扫描后,需先确定哪些是业务…...

常见的软件测试用例设计方法有哪些?
常见的软件测试用例设计方法,个人认为主要是下面这6种: 1)流程图法(也叫场景法) 2)等价类划分法 3)边界值分析 4)判定表 5)正交法 6)错误推测法 这6种常见方法中,我分别按照定义、应用场景、使用步骤、案例讲解…...

【24届校招】c++选手还有机会吗?如何选择更好的出路?
一、今年为什么c选手就业形势如此艰难? 去年c岗位的火热,不少c选手拿到高薪offer,今年转c的人群变多,内卷加剧,高学历大佬多如牛毛,很多比较好的c岗位多人投递,僧多肉少。 从行情来说…...
hvigor ERROR: Failed :entry:default@ProcessLibs...【鸿蒙开发-BUG已解决】
文章目录 项目场景:问题描述原因分析:建议的解决方案总结HarmonyOSArkTS项目场景: 项目无法在真机上运行。报错 hvigor ERROR: Failed :entry:default@ProcessLibs… hvigor ERROR: 2 file found in ‘lib/arm64-v8a/libagccrypto.so’. This may cause unexpected errors …...
由于没有公钥,无法验证下列签名: NO_PUBKEY
安装软件需要更新 sudo apt-get update 由于没有公钥,无法验证下列签名: NO_PUBKEY AA8E81B4331F7F50 NO_PUBKEY 112695A0E562B32A sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 3B4FE6ACC0B21F32 只需要把最后一部分搞成自己…...

vue3 for循环创建的多个e-form 添加校验
v-for 创建 ref <el-form :model"item" :rules"state.rules" :ref"el > getRiskSpreadRef(el, index)" ></el-form>// 定义ref list const riskSpreadRefList ref<HTMLElement[]>([]);// ref存到数组 const getRiskSpread…...

【虚拟机Ubuntu 18.04配置网络】
虚拟机Ubuntu 18.04配置网络 配置网络连接方式,查看自己网关 修改主机名 修改系统配置1. 配置网络连接方式,查看自己网关 选择虚拟机镜像设置网络连接模式,可以选择桥接或者NAT连接(我这里选择是NAT连接) 确定自己网关,可以在虚拟机 -》 编辑 -》虚拟网络编辑器…...
MySQL 中的 JSON_CONTAINS 函数详解
在处理 MySQL 中的 JSON 数据时,我们经常需要检查一个 JSON 文档是否包含特定的值。这时,JSON_CONTAINS 函数就显得非常有用。 JSON_CONTAINS函数介绍 JSON_CONTAINS 是 MySQL 提供的一个 JSON 函数,用于测试一个 JSON 文档是否包含特定的值…...

详细解答T-SNE程序中from sklearn.manifold import TSNE的数据设置,包括输入数据,绘制颜色的参数设置,代码复制可用!!
文章目录 前言——TSNE是t-Distributed Stochastic Neighbor Embedding的缩写1、可运行的T-SNE程序2. 实验结果3、针对上述程序我们详细分析T-SNE的使用方法3.1 加载数据3.2 TSNE降维3.3 绘制点3.4 关于颜色设置,颜色使用的标签数据的说明cy 总结 前言——TSNE是t-D…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...