URL的概念与组成:https://blog.csdn.net/weixin_53436351/article/details/123833107
标识互联网上的内容:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web
HTML 基础:https://developer.mozilla.org/zh-CN/docs/Learn/Getting_started_with_the_web/HTML_basics
网页是怎样构成的:http://c.biancheng.net/python_spider/webpage.html
url网址相关内容
url语法规则
一个网页地址实例: http://www.runoob.com/html/html-tutorial.html
语法规则:
scheme://host.domain:port/path/filename
protocol:// hostname[:port] / path / [;parameters][?query]#fragment
协议://主机地址:端口号/可选【路径 + 参数 + 锚点】
protocol协议 | 定义因特网服务的类型。最常见的类型是 http。以前用的是HTTP协议,而后应为不安全,就该用https协议,安全的通道。有的网站没有HTTPS证书:由于此网站没有证书,因此信息(如密码或信用卡)不会安全地发送到此网站,并且可能被其他人截获或看到。 |
---|---|
host域名 | 定义域主机(http 的默认主机是 www)。一个URL中,也可以使用IP地址作为域名使用。 |
domain | 定义因特网域名,比如 runoob.com |
:port端口 | 定义主机上的端口号(http 的默认端口号是 80 , https默认打开 443 端口)。跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口。 |
path虚拟目录 | 定义服务器上的路径(如果省略,则文档必须位于网站的根目录中)。从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。 |
filename文件名 | 定义文档/资源的名称。从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名。 |
锚 | 从“#”开始到最后,都是锚部分。锚部分也不是一个URL必须的部分。 |
参数 | 从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。 |
注意: URL 只能使用 ASCII 字符集来通过因特网进行发送。 也就是说URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号 。
URL特殊字符编码
字符 | 含义 | 16进制值编码 |
---|---|---|
+ | URL 中 + 号表示空格 | %2B |
空格 | URL中的空格可以编码为 + 号或者 | %20 %20 |
/ | 分隔目录和子目录 | %2F |
? | 分隔实际的 URL 和参数 | %3F |
% | 指定特殊字符 | %25 |
# | 表示书签 | %23 |
& | URL 中指定的参数间的分隔符 | %26 |
= | URL 中指定参数的值 | %3D |
URL 协议
模式、协议:它告诉浏览器如何处理将要打开的文件。最常用的模式是超文本传输协议(Hypertext Transfer Protocol,缩写为HTTP),这个协议可以用来访问网络。其他部分协议如下:
Scheme | 访问 | 用于… |
---|---|---|
http | 超文本传输协议 | 以 http:// 开头的普通网页。不加密。 |
https | 安全超文本传输协议 | 安全网页,加密所有信息交换。 |
ftp | 文件传输协议 | 用于将文件下载或上传至网站。 |
file | 您计算机上的文件。 |
http协议常用的请求方法
方法 | 描述 |
---|---|
GET | 请求指定的页面信息,并返回响应内容 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中。POST请求可能会导致新的资源的建立、或已有资源的修改 |
GEAD | 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报文头部信息 |
PUT | 从客户端像服务器传送的数据取代指定的文档内容 |
DELEAE | 请求服务器删除指定内容 |
OPTIONS | 允许客户端查看服务器性能 |
http响应的状态码
状态码 | 含义 | 状态码 | 含义 |
---|---|---|---|
100 | 客户端必须继续发出请求。 | 404 | 可连接服务器,但服务器无法取得所请求的网页,请求资源不存在。 |
101 | 客户端要求服务器根据请求转换HTTP协议版本。 | 405 | 用户在Request-Line字段定义的方法不被允许。 |
200 | 表明该请求被成功地完成,所请求的资源发送到客户端。 | 406 | 根据用户发送的Accept,请求资源不可访问。 |
201 | 提示知道新文件的URL。 | 407 | 类似401,用户必须首先在代理服务器上取得授权。(确认有连接网络,能上网。mac系统中偏好设置—>网络—>以太网点高级设置—>代理Proxies–>勾选web代理[Web Proxy(HTTP)]和安全web代理[secure Web Proxy(HTTPS)],填写web代理服务器地址和勾选填写登录的账号密码) |
202 | 接受并处理,但处理未完成。 | 408 | 客户端没有在用户指定的时间内完成请求。 |
203 | 返回信息不确定或不完整。 | 409 | 对当前资源状态,请求不能完成。 |
204 | 收到请求,但返回信息为空。 | 410 | 服务器上不再有此资源。 |
205 | 服务器完成了请求,用户必须复位当前已经浏览过的文件。 | 411 | 服务器拒绝用户定义的Content-Length属性请求。 |
206 | 服务器已经完成了部分用户的GET请求。 | 412 | 一个或多个请求头字段在当前请求中错误。 |
300 | 请求的资源可在多处获得。 | 413 | 请求的资源大于服务器允许的大小。 |
301 | 本网页被永久性转移到另一个URL。 | 414 | 请求的资源URL长于服务器允许的长度。 |
302 | 请求的网页被重定向到新的地址。 | 415 | 请求资源不支持请求项目格式。 |
303 | 建议用户访问其他URL或访问方式。 | 416 | 请求中包含Range请求头字段,在当前请求资源范围内没有range指示值。 |
304 | 自从上次请求后,请求的网页未修改过。 | 417 | 服务器不满足请求Expect头字段指定的期望值。 |
305 | 请求的资源必须从服务器指定的地址获得。 | 500 | 服务器错误。 |
306 | 前一版本HTTP中使用的代码,现已不再使用。 | 501 | 服务器不支持请求的功能。 |
307 | 声明请求的资源临时性删除。 | 502 | 网关错误。 |
400 | 客户端请求有语法错误。 | 503 | 无法获得服务。 |
401 | 请求未经授权。 | 504 | 网关超时。 |
402 | 保留有效ChargeTo头响应。 | 505 | 不支持的http版本。 |
403 | 禁止访问,服务器收到请求,但拒绝提供服务。 |
http常见请求参数
url | 请求url地址 |
---|---|
headers | 请求头 |
data | 发送编码为表单形式的数据 |
params | 查询字符串 |
Refer | 包含一个URL,用户从该URL代表的页面出发访问当前请求的页面 |
User-Agent | HTTP客户端运行的浏览器类型的详细信息。通过该头部信息,web服务器可以判断到当前HTTP请求的客户端浏览器类别。 |
Accept | 指定客户端能够接收的内容类型,内容类型中的先后次序表示客户端接收的先后次序。q表示权重(优先级)。 |
Accept-Encoding | 指定客户端浏览器可以支持的web服务器返回内容压缩编码类型(接收类型,一般注释掉,使用时需要接收类型为UTF-8) |
Accept-Language | 指定HTTP客户端浏览器用来展示返回信息所优先选择的语言 |
Cache-Control | 缓存 |
Connection | 表示是否需要持久连接。如果web服务器端看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),表示连接持久有效,是不会断开的 |
cookie | HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。是一个记录了用户登录状态以及用户属性的加密字符串。(登录记录) |
host | 请求web服务器的域名地址。(主机地址) |
Upgrade-Insecure-Requests | 1表示http请求升级为https请求 |
谷歌浏览器的更多工具–>清除浏览记录–>刷新网页后已经登录的账号需要再次登录(或有的网站无操作半小时后点击页面内容需要重新登录)
静态网页和动态网页
在编写一个爬虫程序前,首先要明确待爬取的页面是静态的,还是动态的,只有确定了页面类型,才方便后续对网页进行分析和程序编写。对于不同的网页类型,编写爬虫程序时所使用的方法也不尽相同。
静态网页
静态网页是标准的 HTML 文件,通过 GET 请求方法可以直接获取,文件的扩展名是.html、.htm等,网面中可以包含文本、图像、声音、FLASH 动画、客户端脚本和其他插件程序等。静态网页是网站建设的基础,早期的网站一般都是由静态网页制作的。静态并非静止不动,它也包含一些动画效果,这一点不要误解。
我们知道,当网站信息量较大的时,网页的生成速度会降低,由于静态网页的内容相对固定,且不需要连接后台数据库,因此响应速度非常快。但静态网页更新比较麻烦,每次更新都需要重新加载整个网页。
静态网页的数据全部包含在 HTML 中,因此爬虫程序可以直接在 HTML 中提取数据。通过分析静态网页的 URL,并找到 URL 查询参数的变化规律,就可以实现页面抓取。与动态网页相比,并且静态网页对搜索引擎更加友好,有利于搜索引擎收录。
动态网页
动态网页指的是采用了动态网页技术的页面,比如 AJAX(是指一种创建交互式、快速动态网页应用的网页开发技术)、ASP(是一种创建动态交互式网页并建立强大的 web 应用程序)、JSP(是 Java 语言创建动态网页的技术标准) 等技术,它不需要重新加载整个页面内容,就可以实现网页的局部更新。动态页面使用“动态页面技术”与服务器进行少量的数据交换,从而实现了网页的异步加载。
动态网页中除了有 HTML 标记语言外,还包含了一些特定功能的代码。这些代码使得浏览器和服务器可以交互,服务器端会根据客户端的不同请求来生成网页,其中涉及到数据库的连接、访问、查询等一系列 IO 操作,所以其响应速度略差于静态网页。
get和post的区别
get有?
post没有?
(从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。)
GET
用于获取资源,当采用 GET 方式请求指定资源时, 被访问的资源经服务器解析后立即返回响应内容。通常以 GET 方式请求特定资源时, 请求中不应该包含请求体,所有需要向被请求资源传递的数据都应该通过 URL 向服务器传递。
HTTP默认的请求方法就是GET:1.没有请求体。2.数据必须在1K之内。3.GET请求数据会暴露在浏览器的地址栏中。
GET请求常用的操作:1.在浏览器的地址栏中直接给出URL,那么就一定是GET请求。2.点击页面上的超链接也一定是GET请求。3.提交表单时,表单默认使用GET请求,但可以设置为POST。
POST
用于提交数据, 当采用 POST 方式向指定位置提交数据时,数据被包含在请求体中,服务器接收到这些数据后可能会建立新的资源、也可能会更新已有的资源。同时 POST 方式的请求体可以包含非常多的数据,而且格式不限。因此 POST 方式用途较为广泛,几乎所有的提交操作都可以使用 POST 方式来完成。
POST请求:1.数据不会出现在地址栏中。2.数据的大小没有上限。3.有请求体。4.请求体中如果存在中文,会使用URL编码!
注:虽然用 GET 方式也可以提交数据,但一般不用 GET 方式而是用 POST 方式。在 HTTP协议中,建议 GET 方式只用来获取数据,而 POST 方式则用来提交数据(而不是获取数据)。
requests.post()用法与requests.get()完全一致,特殊的是requests.post()有一个data参数,用来存放请求体数据
简单来说,get方式和post方式本质上区别:
- GET产生 一个 TCP数据包
- POST产生 两个 TCP数据包 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); 而对于POST,浏览器先发送header,服务器响应100
continue,浏览器再发送data,服务器响应200 ok(返回数据)。
Html基础
网页一般由三部分组成,分别是 HTML(超文本标记语言)、CSS(层叠样式表)和 JavaScript(简称“JS”动态脚本语言),它们三者在网页中分别承担着不同的任务。
- HTML 负责定义网页的内容
- CSS 负责描述网页的布局
- JavaScript 负责网页的行为
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>编程帮</title>
</head>
<body>
<a href="www.biancheng.net">点击访问</a>
<img src="images/firefox-icon.png" alt="My test image">
<h1>编程帮www.biancheng.net</h1>
<h2>Python爬虫</h2>
<div>
<p>认识网页结构</p>
<ul>
<li>HTML</li>
<li>CSS</li>
</ul>
</div>
</body>
</html>
<!DOCTYPE html> | 声明为 HTML5 文档 |
---|---|
<html>…</html> | 是网页的根元素。该元素包含整个页面的内容。 |
<meta charset=“utf-8”> | 该元素指定文档使用 UTF-8 字符编码,UTF-8 包括绝大多数人类已知语言的字符。 |
<head>…</head> | 元素包含了文档的元(meta)数据,如 <meta charset=“utf-8”> 定义网页编码格式为 utf-8。该元素的内容对用户不可见,其中包含例如面向搜索引擎的搜索关键字(keywords)、页面描述、CSS 样式表和字符编码声明等。 |
<title>…<title> | 元素描述了文档的标题。该元素设置页面的标题,显示在浏览器标签页上,也作为收藏网页的描述文字。 |
<body>…</body> | 表示用户可见的内容 。该元素包含期望让用户在访问页面时看到的内容,包括文本、图像、视频、游戏、可播放的音轨或其他内容。 |
<div>…</div> | 表示框架 |
<p>…</p> | 表示段落 |
<ul>…</ul> | 定义无序列表 |
<ol>…</ol> | 定义有序列表 |
<li>…</li> | 表示列表项 |
<img src=“” alt=“”> | 表示图片。通过包含图像文件路径的地址属性 src,可在所在位置嵌入图像。该元素还包括一个替换文字属性 alt,是图像的描述内容,用于当图像不能被用户看见时显示。 |
<h1>…</h1> | 表示标题 |
<a href=“”>…</a> | 表示超链接 |
json是一种轻量级的数据交换标准,存储文档更小,解析速度越快。
ajax请求:其实质是利用ajax对象(xmlHttpRequest / XHR),异步的向服务器发送请求,服务器会返回部分数据,整个过程无刷新,不打断用户的操作。
查看分页的url有2种方式:下滑和点击。