python - 爬虫之了解url网址概念和HTML基础

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-AgentHTTP客户端运行的浏览器类型的详细信息。通过该头部信息,web服务器可以判断到当前HTTP请求的客户端浏览器类别。
Accept指定客户端能够接收的内容类型,内容类型中的先后次序表示客户端接收的先后次序。q表示权重(优先级)。
Accept-Encoding指定客户端浏览器可以支持的web服务器返回内容压缩编码类型(接收类型,一般注释掉,使用时需要接收类型为UTF-8)
Accept-Language指定HTTP客户端浏览器用来展示返回信息所优先选择的语言
Cache-Control缓存
Connection表示是否需要持久连接。如果web服务器端看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),表示连接持久有效,是不会断开的
cookieHTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。是一个记录了用户登录状态以及用户属性的加密字符串。(登录记录)
host请求web服务器的域名地址。(主机地址)
Upgrade-Insecure-Requests1表示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种方式:下滑和点击。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个关于Python爬虫获取新浪新闻信息的问题。首先,我们需要先了解一下爬虫的基本概念和工作原理。 爬虫是一种自动化程序,可以模拟人类对网站的访问并自动抓取数据。它可以通过网络上的URL链接来获取网页内容,并将其转换成结构化的数据,供后续的数据分析或其他用途。 下面是一个简单的Python爬虫程序,可以用来获取新浪新闻的信息: ```python import requests from bs4 import BeautifulSoup url = 'https://news.sina.com.cn/' r = requests.get(url) r.encoding = 'utf-8' soup = BeautifulSoup(r.text, 'html.parser') news_list = soup.find_all('a', class_='news-item') for news in news_list: print(news.text.strip()) print(news['href']) ``` 这个程序使用了Python的requests库和BeautifulSoup库来获取新浪新闻的信息。首先,我们需要将新浪新闻的URL链接赋值给变量url,然后使用requests库来发送HTTP请求,获取网页内容。接着,我们需要使用BeautifulSoup库来解析网页内容,提取出我们需要的信息。在这个例子中,我们使用了find_all方法来查找所有class为news-item的a标签,并使用循环打印出每个新闻的标题和链接。 当然,这只是一个简单的例子,实际上,爬虫的应用非常广泛,可以用来获取各种类型的数据,例如文本、图像、音频等等。但是,请注意,爬虫的使用需要遵守法律法规和道德规范,不要进行恶意攻击或侵犯他人隐私。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值