目录

前言

一、静态网页数据

二、网址通讯流程

1.DNS查询

2.建立连接

3.发送HTTP请求

4.服务器处理请求

5.服务器响应

6.渲染页面

7.页面交互

三、URL/POST/GET

1.URL

2.GET

 形式

3.POST

形式

四.获取静态网页数据

1.requests库

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢


前言

在网站设计领域,基于纯HTML格式构建的网页通常定义为静态网页,这种类型的网页是早期网站建设的主要形式。对于网络爬虫来说,抓取静态网页中的数据相对较为简单,因为所需的所有信息都直接嵌入在网页的HTML代码里。然而,对于那些利用AJAX技术动态加载数据的网页,其数据并不总是直接出现在HTML代码中,这对爬虫的抓取工作造成了一定的难度。

在静态网页的数据抓取过程中,Requests库显示出其卓越的实用性。这个库不仅功能全面,而且操作简洁直观。本章的内容将从介绍如何安装Requests库开始,接着如何使用这个库来发送HTTP请求并获得相应内容,探讨如何通过自定义Requests的参数来适应不同的数据抓取需求。


一、静态网页数据

静态网页是互联网的基本组成部分,它们是由服务器以 HTML(超文本标记语言)形式发送到客户端(通常是浏览器)的网页。这些页面在服务器上是预先编写好的,对于所有用户来说,其内容在每次请求时都保持不变。与之相对的是动态网页,它们的内容可以根据用户的不同请求或交互而变化。

一般来说静态网页可获取到的信息有:

  • 文本内容:网页上的所有文本,如文章、标题、链接描述等。
  • 链接(URLs):网页上的所有超链接。
  • 图像及其URL:网页上的图像以及它们的源URL。
  • HTML结构信息:如各种HTML标签中的内容(div、span、p等)。
  • 样式信息:例如CSS类和ID等。
  • 元数据:如网页标题、描述、关键词等。

目前主流处理静态网页的工具有Python 语言的 requests 库来发送HTTP请求,并使用 BeautifulSouplxml 解析HTML内容。在浏览器中使用开发者工具可以更深入地分析网页结构和内容,按下F12即可进入开发者模式。

二、网址通讯流程

因为涉及到网址通讯流程,这里简要介绍一下网页信息传输流程更方便以后了解我们应该如何获取静态数据以及抓取信息。

当我们在浏览器中输入一个网址并访问时,发生的网络通讯流程可以分为以下几个主要步骤:

1.DNS查询

浏览器首先需要找出您要访问的网站的IP地址。它通过向DNS(域名系统)服务器发出查询来完成这一步骤。如果该地址已经在浏览器的缓存中,这一步将被跳过。

2.建立连接

一旦浏览器获得了网站的IP地址,它将尝试通过TCP(传输控制协议)建立到该地址的连接。通常这涉及到一个“三次握手”过程,确保稳定的连接建立。

3.发送HTTP请求

连接建立后,浏览器会向服务器发送一个HTTP请求。这个请求包括所请求页面的详细信息,以及客户端(即浏览器)的信息,如请求的类型(通常是GET或POST)、所需资源的路径、浏览器类型等。

4.服务器处理请求

服务器接收到请求后,会根据请求的类型和资源处理请求。如果是静态内容(如HTML页面、图片、CSS文件等),服务器通常会直接返回这些文件。对于动态内容,服务器可能会执行后端代码,如数据库查询,然后生成相应的HTML内容。

5.服务器响应

服务器处理请求后,会将响应数据(网页代码、图片、错误消息等)发送回浏览器。这通常以HTTP响应的形式发生,包括状态码(如200表示成功,404表示未找到等)和响应体。

6.渲染页面

浏览器接收到服务器的响应后,会解析和渲染页面。这包括HTML的解析、CSS样式的应用、JavaScript的执行等。这一过程中,浏览器可能还会发送额外的请求来获取页面上的其他资源(如图片、CSS文件、JavaScript文件等)。

7.页面交互

页面加载完成后,用户可以与页面进行交互,如点击链接、提交表单等。这可能会触发额外的HTTP请求和服务器响应,从而更新页面内容。通常使用HTTP的GET和POST请求最为常见,用于获取和提交数据。

从以上网页数据获取流程理解完,我们再来了解URL/POST/GET三者在浏览器网页网络通讯中代表的意义和作用,这也是一般通用的网络信息通讯规则。

三、URL/POST/GET

大家不妨在浏览器开发者模式,点击网络一栏可以查看每次网络数据交互情况,基本上都会有涉及到GET和POST,所有这里详细讲述GET和POST的具体作用和形式。

1.URL

URL想必大家都知道,诸如:https://www.csdn.net/就是一个URL,但是这里要较为详细的讲述一下URL的参数,也就是除去标准的URL后续?后面所带的参数含义。

URL参数是指在URL(统一资源定位符)中包含的一组键值对,用于向服务器传递额外的信息。它们通常出现在问号(?)之后,并使用等号(=)分隔键和值,不同键值对之间使用和号(&)分隔。这种传递参数的方式使得客户端(通常是浏览器)能够向服务器发送特定的请求,以获取或提交特定的数据。 比如https://www.csdn.net/?spm=1010.2135.3001.4476,?后面的参数就是。其中,spm是一个参数,它的值是1010.2135.3001.4476;这样,服务器就能够识别客户端的请求,并根据这些参数来执行相应的操作,比如执行搜索操作并过滤到编程相关的结果。

这里需要URL的四个特点:

  1. 键值对: URL参数是以键值对的形式存在的,一个键对应一个值。在上面的例子中,q是键,python是值。

  2. 多个参数: URL可以包含多个参数,它们之间使用&符号分隔。在上面的例子中,q=pythoncategory=programming是两个不同的参数。

  3. 编码: 由于URL中不能包含一些特殊字符,参数的键和值通常需要进行URL编码。例如,空格可能被编码为%20

  4. GET请求: URL参数通常与HTTP的GET请求一起使用。在GET请求中,参数会被附加到URL上,而在POST请求中,参数通常包含在请求体中。

URL参数在Web开发中被广泛使用,用于传递用户输入、筛选数据、进行搜索等各种场景。在服务端,开发人员可以通过解析URL参数来理解客户端请求的意图,并采取相应的操作。

2.GET

在浏览器与服务器之间的网络交互中,GET请求是最常用的请求类型之一,主要用于从服务器检索数据。GET主要有四种作用:

  1. 数据检索:GET请求的主要目的是请求服务器发送资源(如网页、图片、文件等)。它是一个“只读”请求,意味着它应该不对服务器上的数据产生任何影响。

  2. 简单和无副作用:GET请求被设计为安全和幂等的,这意味着重复执行相同的GET请求应该得到相同的结果,且不会对服务器的数据状态产生改变。

  3. 可被缓存:GET请求的结果往往可以被浏览器或服务器缓存以加速后续访问。

  4. 书签和分享:GET请求可以通过URL完整表达,这使得请求的资源可以通过链接共享或保存为书签。

形式

URL结构https://www.example.com/page,指定请求的服务器和资源路径。查询字符串:以?开始,后接一个或多个参数。每个参数由键值对组成,格式为key=value,多个参数之间用&分隔,如 ?query=search&sort=asc

https://www.example.com/search?query=keyword&sort=ascending&page=1

上述GET请求中客户端请求服务器上的/search资源,并传递了三个参数:query(搜索关键字)、sort(排序方式)、page(页码)。

  • GET请求还包括HTTP请求头部,其中可能包含浏览器类型、接受的响应格式、语言偏好等信息。
  • 例如:User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36

一般用到GET的场景有:

  • 检索数据:当需要从服务器获取数据时使用,如加载网页、图片、视频或任何其他类型的文件。
  • 搜索查询:在搜索引擎中输入查询,提交的就是一个GET请求。
  • 简单的表单提交:用于提交非敏感数据的表单,虽然不推荐(出于安全和数据长度限制的考虑)。

3.POST

它与GET请求相比,通常用于发送数据到服务器以便更新或创建资源。POST请求主要用于向服务器提交数据,通常不会被缓存。这些数据通常用于更新现有资源或创建新资源。由于POST请求将数据包含在请求体中,而不是URL中,因此它比GET请求更适合发送敏感或大量的数据。相同的POST请求如果被重复发送,可能会每次都产生不同的结果,例如在数据库中创建多个资源。

形式

请求体

  • 数据是在HTTP请求的主体中发送的,而不是在URL中。
  • 数据可以采用多种格式,例如表单数据、JSON、XML等。

HTTP头部

  • Content-Type头部指定了发送数据的格式,例如application/x-www-form-urlencoded(表单数据)、application/json(JSON格式)等。
  • Content-Length头部显示数据的大小。

我们举个POST例子来看:

POST /submit-form HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27

name=John&age=30&city=New York

客户端向/submit-form路径发送POST请求,请求体中包含了表单数据。

一般来说POST发送的场景有:

  • 表单提交:在用户提交表单(尤其是包含敏感信息的表单,如登录凭证)时使用。
  • 文件上传:在上传文件到服务器时使用。
  • API交互:在与API进行交互,尤其是在创建或更新数据时使用。

POST请求因其安全性和非幂等性,被广泛用于敏感数据的传输和处理。

四.获取静态网页数据

1.requests库

Requests 是一个简单易用的 Python HTTP 库,用于发送网络请求。它是基于 urllib3 构建的,并提供了大量直观的功能来发送 HTTP/1.1 请求。它是 Python 社区中最受欢迎的 HTTP 客户端库之一。Requests主要特点有:

  1. 用户友好:Requests 的设计初衷是使 HTTP 请求更简单、更人性化。
  2. 内置功能丰富:支持从基本的 GET、POST 请求到复杂的 HTTP 功能如会话、cookie 管理等。
  3. 自动内容解码:自动解码来自服务器的响应。
  4. JSON 响应内容:内置的 JSON 解码器。
  5. 超时控制:轻松添加请求超时。
  6. 会话与 Cookie 管理:维持会话并管理 Cookies。
  7. SSL证书验证:可选的证书验证。

我们可以使用Requests去模拟每一次与服务端网络数据交互的过程,通过requests支持的常用函数就可以看出:

  • requests.get(url, params=None, **kwargs):发送一个 GET 请求到指定的 URL。
  • requests.post(url, data=None, json=None, **kwargs):发送一个 POST 请求到指定的 URL。
  • requests.put(url, data=None, **kwargs):发送一个 PUT 请求到指定的 URL。
  • requests.delete(url, **kwargs):发送一个 DELETE 请求到指定的 URL。
  • requests.head(url, **kwargs):发送一个 HEAD 请求到指定的 URL。
  • requests.options(url, **kwargs):发送一个 OPTIONS 请求到指定的 URL。

大家可以通过跑一下我给出的demo:

import requests
r =requests.get('https://www.csdn.net/')
print("文本编码:",r.encoding)
print('响应状态码:',r.status_code)
print('字符串的方式的响应体:',r.text)

但是有些网页需要对Requests的参数进行设置才能获取需要的数据,这里暂时不做展开,以后详细讲述request的时候再讲。接下来来尝试访问带有参数的url:

link = "https://blog.csdn.net/master_hunter"#定义link为目标网页地址
#定义请求头的浏览器代理,伪装成浏览器
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0'}
key_dict={'spm':'1000.2115.3001.5343'}
r = requests.get(link,headers = headers,params=key_dict)#请求网页
print('URL已经正确编码:',r.url)
print('字符串方式的响应体:\n',r.text)

可以得到:

现在通过使用POST方法,客户端向服务器提交数据,我们便可以得到想要的内容:

import requests
link = "https://blog.csdn.net/master_hunter"#定义link为目标网页地址
#定义请求头的浏览器代理,伪装成浏览器
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0',
    'Host':'eva2.csdn.net'
}
key_dict={'spm':'1000.2115.3001.5343'}
r=requests.post(link,headers = headers,params=key_dict)
print(r.text)

大家可以自己运行一遍,这里就不作演示了。


点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见。

相关文章

Go 是否有三元运算符?Rust 和 Python 是怎么做的?

本文主要就 Go 中三元运算符展开讨论,从简单if-else语句、到基于匿名函数的单行表达式、及泛型抽象 If 函数等方式来实现类似的功能。当然,我没有建议使用这些方式,在没有内置支持的情况下,if-else的写法就挺好的。Go 中如何实现三元运算符?Rust 和 Python 是怎么做的?

IP定位技术助力网络安全保护

当网络遭受DDoS攻击时,通过IP定位技术,可以迅速确定攻击源头的地理位置,进而采取相应的防御措施,如屏蔽攻击源IP地址等。随着技术的不断进步和应用场景的不断拓展,IP定位技术将在网络安全保护领域发挥更加重要的作用,为网络空间的安全稳定提供有力保障。例如,网络管理员可以根据IP定位结果,将恶意IP地址列入黑名单,阻止其访问网络,从而避免潜在的安全威胁。IP定位技术是一种基于IP地址的地理位置定位技术,通过分析IP地址的归属地信息,可以精确地确定网络用户的地理位置,从而实现对网络流量的有效监控和管理。

Python和Java的区别(不断更新)

运行效率:一般来说,Java的运行效率要高于Python,这主要是因为Java是编译型语言,其代码在执行前会进行预编译,而Python是解释型语言,边解释边执行。而Python没有类似的强大虚拟机,但它的核心是可以很方便地使用C语言函数或C++库,这使得Python可以轻松地与底层硬件进行交互。**类型系统:**Java是一种静态类型语言,所有变量需要先声明(类型)才能使用,且类型在编译时就已经确定。总的来说,Python和Java各有其优势和特点,选择哪种语言取决于具体的项目需求、开发环境以及个人偏好。

.[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复

这些勒索病毒往往攻击入侵的目标基本是Windows系统的服务器,包括一些市面上常见的业务应用软件,例如:金蝶软件数据库,用友软件数据库,管家婆软件数据库,速达软件数据库,科脉软件数据库,海典软件数据库,思迅软件数据库,OA软件数据库,ERP软件数据库,自建网站的数据库等,均是其攻击加密的常见目标文件,所以有以上这些业务应用软件的服务器更应该注意做好服务器安全加固及数据备份工作。通过采取这些预防措施,您可以最大程度地降低成为[hudsonL@cock.li].mkp勒索病毒等威胁的风险,并保护您的数据安全。

Ubuntu使用Docker部署Nginx并结合内网穿透实现公网远程访问

cpolar安装成功后,在外部浏览器上访问Linux 的9200端口即:【http://服务器的局域网ip:9200】,使用cpolar账号登录,登录后即可看到cpolar web 配置界面,结下来在web 管理界面配置即可。如果有长期远程访问本地Nginx服务的需求,但又不想每天重新配置公网地址,还想地址好看又好记,那我推荐大家选择使用固定的二级子域名方式来远程访问。,点击左侧的预留,选择保留二级子域名,地区选择China VIP,设置一个二级子域名名称,点击保留,保留成功后复制保留的二级子域名名称。

解决Linux环境下gdal报错:ERROR 4: `/xxx.hdf‘ not recognized as a supported file format.

题外话:我发现linux系统和Windows系统下面,库的版本是有差异的。比如我的本机Windows上装的是gdal3.2.3和numpy1.19.1,linux服务器上装的却是gdal3.0.2和numpy1.21.5。这个是很常见的回复,网上许多回答都说低版本的 gdal 不支持 hdf5,让你重装高版本的gdal。我之前用pip安装了whl,暴力装上了,但用的时候就会有问题。安装了不冲突的gdal之后,就成功打开文件啦~一开始我是抱着试试的心态,用conda,不用pip,重新安装了一下我的gdal。

Web 安全之点击劫持(Clickjacking)攻击详解

点击劫持(Clickjacking)攻击,又称为界面伪装攻击,是一种利用视觉欺骗手段进行攻击的方式。攻击者通过技术手段欺骗用户点击本没有打算点击的位置,当用户在被攻击者攻击的页面上进行操作时,实际点击结果被劫持,从而被攻击者利用。这种攻击方式利用了用户对网站的信任,通过覆盖层(通常是透明的iframe)覆盖在另一个网页之上,使受害者无法察觉。

Docker网络配置与自定义IP容器通信

互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构。IP地址在设计时就考虑到地址分配的层次特点,将每个IP地址都分割成网络号和主机号两部分,以便于 IP地址的寻址操作。

大数据深度学习卷积神经网络CNN:CNN结构、训练与优化一文全解

卷积神经网络是一种前馈神经网络,它的人工神经元可以响应周围单元的局部区域,从而能够识别视觉空间的部分结构特征。卷积层: 通过卷积操作检测图像的局部特征。激活函数: 引入非线性,增加模型的表达能力。池化层: 减少特征维度,增加模型的鲁棒性。全连接层: 在处理空间特征后,全连接层用于进行分类或回归。卷积神经网络的这些组件协同工作,使得CNN能够从原始像素中自动学习有意义的特征层次结构。随着深度增加,这些特征从基本形状和纹理逐渐抽象为复杂的对象和场景表现。

什么是DDOS高防ip?DDOS高防ip是怎么防护攻击的

同时,高防IP设备还支持防御日志的记录和分析功能,可以对攻击流量进行深入分析,进一步了解攻击来源和特点,为后续的防御策略提供数据支持。为了解决这些问题,高防IP作为一种网络安全服务应运而生。高防IP通过实时监测和分析流量,识别和拦截恶意流量,确保正常流量能够安全地转发给目标服务器,从而保护企业的业务正常运行。高防IP设备会对流量进行实时监测和分析,对流量的来源、目的地、协议、数据包大小、数据包速率等进行全面分析和判断。通过对流量的实时监测和分析,可以及时发现异常流量的存在,为后续的防御策略提供依据。

详解动态网页数据获取以及浏览器数据和网络数据交互流程-Python

动态网页是一种在用户浏览时实时生成或变化的网页。。相比之下,动态网页可以根据用户的互动、请求或其他条件在浏览器端或服务器端生成新的内容。而且现在的网页一般都是采用前后端分离的架构,前端负责展示和用户交互,后端负责数据处理。这种架构使得前端可以更加灵活地实现动态内容的加载和展示。所以说以后想要获取到数据,动态网页数据获取会成为我们主流获取网页数据的技术。所以在动态网页数据获取这方面我们需要下足功夫了解动态网页数据交互形式、数据存储访问模式等方方面面的知识,我们才好更加灵活的获取到数据。

Samtec卓越应用 | SEARAY:最大限度提高设计灵活性和密度

与标准的BGA/焊球连接相比,Solder Charge互连在连接器与印刷电路板的组装过程中。是专为高带宽应用而设计的坚固触头点。如果您需要SEARAY™尺寸的高速、高密度电缆组件,请查看SEAC系列阵列电缆组件。0.80 毫米间距系统的密度是标准 1.27 毫米栅格的两倍。为设计人员提供了大量的设计灵活性,远远超过业内任何其他阵列产品。这样就能实现更长的循环寿命和更优越的电气性能。如果使用我们推荐的引脚分配,设计人员的单端设计最多可获得。,这在设计高引脚数连接器时是一个重要的考虑因素。

网络知识-以太网技术的发展及网络设备

大家都被互联网上各种各样的内容、技术闪亮了眼睛,没有太多人去了解比较底层的一些网络技术。面试的时候,我也问过很多技术人员,对以太网是否了解,了解多少?但是很多人都知之甚少!但是,在我们实际工作碰到问题、分析问题、定位问题、解决问题的时候,又必须要了解这方面的知识。以太网最初到现在的主要设备包括集线器、中继器、网桥、交换机。以太网目前应用在很多行业,在视频监控、安防、视频会议等领域都有很广泛的应用。

为什么ChatGPT选择了SSE,而不是WebSocket?

WebSocket是一种网络通信协议,它最早被提出来是为了解决HTTP连接的一大限制:HTTP协议中,一个客户端发送给服务端的请求必须由服务端返回一个响应,这使得服务端无法主动向客户端推送数据。客户端通过发送一个特殊的HTTP请求向服务器请求建立WebSocket连接。这个请求类似于:GET /chat HTTP/1.1 Upgrade: websocket Connection: Upgrade服务器响应这个请求,确认建立WebSocket连接。
返回
顶部