【Python】第一章 爬虫基础
1. HTTP 基本原理
1.1 URI 和 URL
URI:统一资源标识符
urn:id:123456
只为资源命名,但不指定如何定位
1
http://localhost:8080/Study/test.jsp
指定了访问资源的唯一方式(访问协议、访问路径和资源名称)
1
URL:统一资源定位符
URN:统一资源名称
URL的基本组成格式
scheme://[username:password@]hostname[:port][/path][;parameters][?query][#fragment]
对资源描述的部分补充
两个主要应用
单页面路由:Vue、React 都可以借助它来做路由管理
HTML 锚点:控制一个页面打开时自动下滑滚动到某个特定的位置
用来查询某类资源
如有多个查询,则用 & 隔开
用来指定访问某个资源时的附加信息
网络资源在服务器中的指定地址
http://localhost:8080
服务器设定的端口
1
可以是域名或 IP 地址
某些情况下 URL 需要提供用户名和密码才能访问
常用协议:hrrp、https、ftp等
scheme(protocol):协议
username、password:用户名、密码
hostname:主机地址
port:端口
path:路径
parameters:参数
query:查询
fragment:片段
1
1.2 HTTP 和 HTTPS
HTTP:超文本传输协议
把超文本数据从网络传输到本地路由器
能够保证高效而准确地传输超文本文档
HTTPS:以安全为目标的 HTTP 通道
建立一个信息安全通道,保证数据传输的安全性
确认网站的真实性
在 HTTP 下加入 SSL 层
SSL 的主要作用
1.3 请求
1.3.1 请求方法
用于标识请求客户请求服务端的方式
常见的请求方法:
数据通常以表单的形式传输,而不会体现在 URL 中
请求的参数会直接包含到 URL 里
GET:在浏览器中直接输入 URL 并回车
POST:大多在提交表单时发起
GET 和 POST 请求方法的区别
URL 不包含参数数据,数据都是通过表单形式传输,会包含在请求体中
对提交的数据没有大小限制
参数包含在 URL 中,数据可以在 URL 中看到
提交的数据最多只有1MB
GET
POST
1.3.2 请求的网址
唯一确定客户端向请求的资源
1.3.3 请求头
用来说明服务器要使用的附加信息
常用的请求头信息
在 HTTP 协议消息头中
用来标识具体请求中的媒体类型信息
text/html:HTML 格式
image/gif:GIF 图片
application/json:JSON 类型
一个特殊的字符串头
使服务器识别客户端使用的操作系统及版本、浏览器及版本等信息
用于标识请求是哪个页面发过来的
网站为了辨别用户,进行会话跟踪而存储在用户本地的数据
主要功能为维持当前访问会话
自动登录
用于指定请求资源的主机 IP 和端口号
内容为请求 URL 的原始服务器或网关的位置
用于指定客户端可接受的内容编码
用于指定客户端可接受的语言类型
用于指定客户端可接受哪些类型的信息
Accept:请求报头域
Accept-Language:
Accept-Encoding:
Host:
Cookie:
Referer:
User-Agent:
Content-Type:互联网媒体类型(MIME 类型)
1.3.4 请求体
一般承载的内容是 POST 请求中的表单数据
对于 GET 请求,请求体为空
1.4 响应
1.4.1 响应状态码
表示服务器的响应状态
常见的状态码
200:服务器正常响应
404:页面未找到
500:服务器内部发生错误
1.4.2 响应头
包含了服务器对请求的应答信息
常用的响应头信息
用于指定响应的过期时间
让代理服务器或浏览器将加载的内容更新到缓存中
当再次访问相同的内容时,就可以直接从缓存中加载
用于告诉浏览器需要将此内容放在 Cookie 中,下次请求时将 Cookie 携带上
指定返回的数据类型
包含服务器的信息
名称、版本号等
用于指定响应内容的编码
用于指定资源的最后修改时间
用于标识响应产生的时间
Date:
Last-Modified:
Content-Encoding:
Server:
Content-Type:文档类型
Set-Cookie:设置 Cookie
Expires:
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 保存到客户端的硬盘中,下次还可以继续使用
猜你喜欢
- 【Python】如何在Python中获取地理位置信息
- 有许多提供地理定位服务的Python库可用,特别是geopy模块,它使程序员能够对地址和地点进行地理编码和反向地理编码。通过geopy包,计算两点之间的距离变得更简单,它还提供了两点之间的距离计算。有几个库可以在Python中处理地理数据,包括GeoDjango、GeoPandas和PyProj。这些库使程序员更容易处理地理数据,如点、线和多边形,从而可以设计需要地图和空间分析的应用程序。Python 中可以使用 geopy 库来获取地理位置。以下步骤指导 yoo 在 Python 中获取地理定
- 【Python】如何使用Python中的pickle和JSON进行对象序列化和反序列化
- 如何使用Python中的pickle和JSON进行对象序列化和反序列化Python是一种简单而强大的编程语言,其内置了许多有用的库和模块,使开发人员能够快速进行各种任务。其中,pickle和JSON是两个常用的模块,用于对象序列化和反序列化。本文将介绍如何使用这两个模块进行对象的序列化和反序列化,并提供详细的代码示例。使用pickle进行对象序列化和反序列化pickle是Python中的一个模块,通过它可以将对象转化为二进制数据以便于存储或传输,同时也可以将二进制数据还原为原始对象。首先,我们需
- 【Python】如何使用Python中的字符串操作函数处理大规模文本数据
- 如何使用Python中的字符串操作函数处理大规模文本数据,需要具体代码示例随着互联网的快速发展和数据的不断增加,大规模文本数据处理成了现代科技中的一个重要课题。Python作为一门简单易学且功能强大的编程语言,提供了丰富的字符串操作函数,能够很好地处理大规模文本数据。本文将介绍一些常用的字符串操作函数,并给出具体的代码示例,以帮助读者更好地掌握如何处理大规模文本数据。切割字符串在处理大规模文本数据时,常常需要将长字符串切割成小段文字进行操作。Python提供了split()函数,可以通过指定分隔
- 【Python】解析matplotlib散点图绘制的简明步骤
- 快速入门:matplotlib散点图绘制步骤解析引言:matplotlib是一个强大的Python数据可视化库,可用于绘制各种类型的图表。其中,散点图是一种常用的图表类型,用于展示数据点之间的关系。本文将介绍使用matplotlib绘制散点图的步骤,以及附带具体的代码示例,帮助读者快速入门。步骤一:导入所需库首先,我们需要导入matplotlib库以及其他可能需要使用的库。在Python代码中,使用import关键字来导入所需库,如下所示:import matplotlib.pyplo
- 【Python】Pandas教程:利用该库读取Excel文件的方法
- Pandas教程:如何使用该库读取Excel文件,需要具体代码示例概述:Pandas是一个强大且灵活的数据处理和分析工具,被广泛应用于数据科学和数据处理领域。其中一个常见的应用是读取和处理Excel文件。本教程将向您展示如何使用Pandas库来读取Excel文件,并提供具体的代码示例。安装Pandas:首先,确保您已经安装了Pandas库。您可以使用以下命令在命令行中安装Pandas:pip install pandas读取Excel文件:在开始之前,确保您已经有一个Exce
- 【Python】深入研究matplotlib的色彩映射表
- 深入学习matplotlib颜色表,需要具体代码示例一、引言matplotlib是一个功能强大的Python绘图库,它提供了丰富的绘图函数和工具,可以用于创建各种类型的图表。而颜色表(color map)是matplotlib中一个重要的概念,它决定了图表的配色方案。深入学习matplotlib颜色表,将帮助我们更好地掌握matplotlib的绘图功能,使绘图结果更加美观和有序。本文将介绍颜色表的概念,并给出一些具体的代码示例,以帮助读者更好地理解和应用。二、什么是颜色表颜色表是一个颜色映射表,
- 【Python】使用Python实现小批量梯度下降算法的代码逻辑
- 让theta=模型参数和max_iters=时期数。对于itr=1,2,3,...,max_iters:对于mini_batch(X_mini,y_mini):批量X_mini的前向传递:1、对小批量进行预测2、使用参数的当前值计算预测误差(J(theta))后传:计算梯度(theta)=J(theta)wrt theta的偏导数更新参数:theta=theta–learning_rate*gradient(theta)Python实现梯度下降算法的代码流程第一步:导入依赖项,为线性回归生成数据
- 【Python】如何使用Python操作路径名?
- 在本文中,我们将学习使用 Python 操作路径名。以下是下面提到的一些不同的示例 -从文件路径获取主文件名从文件路径获取目录名将路径组件连接在一起扩展用户的主目录从文件路径中分离文件扩展名算法(步骤)以下是执行所需任务所需遵循的算法/步骤。 -使用 import 关键字导入 os 模块。创建一个变量来存储输入文件路径。使用os模块的basename()函数(返回给定文件路径的基本名称)来获取输入文件路径的最后一个组成部分(主文件名)并打印出来。从文件路径获取主文件名示例以下程序使用 os.pa