BS中的Get请求与Post请求

本文详细解析了HTTP请求中的GET与POST方式的区别,包括数据提交方式、接收方式及适用场景,帮助理解何时选择哪种请求方式。

   我们知道浏览器向服务器发送数据的方式有两种,分别是Get请求和Post请求,那么这两种请求有什么区别么?我们什么时候用Get请求,什么时候用Post请求?  

一. Get请求

发现了什么?

 

二、Post方式提交

我们将HTML中的提交方式method="post" 地址栏发生了什么变化

第一个疑点:地址栏中,用户输入的数据没有了?

第二个疑点:明明输入了数据,可是服务器并没有将数据返回浏览器,进一步说明服务器根本没有接收到用户输入的数据。

下图是接收数据用户输入的数据方式,说明通过该方式(QueryString)

当我们打开浏览器与服务器的传送的报文的时候,发现用户输入的信息在请求体中,也就是说Post 方式是通过请求体,发送给服务器的。——第一个疑点已经解决。

 改变接收提交方式后,成功显示返回的信息,那么第二个疑问解决了,也就说明了Post方式接收用户数据方式使用的是Form

 

 

 三、两者的区别

1.两者提交的方式

get方式使通过浏览器地址栏将数据提交给服务器的。

post方式使通过报文中的请求体发送给服务器的。

2.两者的接收方式

get请求是通过QueryString,接收用户输入的数据的

post 请求是通过Form,接收用户输入的数据的

3.综合考虑,什么时候用get请求,什么时候用Post请求?

1. 表单提交,提交用户个人信息,如果通过get方式提交,信息将全部显示信息栏,将泄露用户信息。

2.地址栏就是一个长方形的框,输入的信息是有限的,无法提交大量的信息。可见post方式会更加安全,提交数据的量更大。

分析,既然post那么好,为什么还用get请求呢?什么时候用呢?

   我们搜索信息的时候用get请求比较好,例如我想查询一个特定东西,并且分享给大家,当看到地址栏里面的信息的时候,很容易辨别地址栏中的信息内容。也有利于网站的推广。

  直接在地址栏输入网址信息、点击超链接都属于get请求,只有表单的提交,这种比较私密的信息,采用post请求。

  关于两种请求方式就先分享到这里,如果本篇博客对您有所帮助,记得点赞哦!

### HTTP POST 请求分页爬取数据实现方法 对于需要通过POST请求进行分页的数据抓取,通常是因为目标网站为了防止直接URL参数访问而设计了表单提交机制来加载不同页面的内容。在这种情况下,使用编程语言中的HTTP库模拟浏览器行为发送带有必要字段的POST请求成为必需。 #### 构建基本框架 利用`requests`库可以方便地发起POST请求并传递所需参数。这里展示了一个基础模板用于向服务器发出带有所需表单项的请求: ```python import requests url = 'http://example.com/post' payload = { '__VIEWSTATE': viewstate_value, 'page': page_number, # 假设这是控制翻页的关键参数之一 } response = requests.post(url, data=payload) print(response.text) ``` 上述代码片段展示了如何设置URL以及准备待发送的数据字典`payload`[^1]。其中包含了两个示例性的键值对:一个是可能存在的视图状态(`__VIEWSTATE`),另一个是指定具体哪一页(page)。实际应用时应当依据目标站点的具体情况进行调整。 #### 动态获取下一页所需的隐藏域信息 当面对多页连续抓取的任务时,除了改变表示页码的部分外,还需要注意某些Web应用程序可能会依赖于上一次交互产生的特定令牌或其它形式的状态保持机制。例如,在ASP.NET开发的应用里经常会出现名为`__VIEWSTATE`这样的隐藏输入框用来保存控件树结构和其他会话相关信息。因此,在每次成功接收响应之后都应该从中提取这些必要的元素以便后续操作能够顺利执行。 ```python from bs4 import BeautifulSoup soup = BeautifulSoup(response.content, "html.parser") view_state = soup.find('input', {'name': '__VIEWSTATE'}).get('value') ``` 这段脚本借助BeautifulSoup解析返回HTML文档,并定位到指定名称的<input>标签从而读取出它的'value'属性作为新的请求体组成部分[^2]。 #### 循环遍历所有页面直至结束条件满足 最后一步就是编写循环逻辑去迭代每一个感兴趣的页面直到达到预定义的最大数量或者其他终止标志为止。考虑到效率问题,建议采用异步I/O模型或者线程池等方式并发处理多个请求以加快整体进度;不过要注意遵守robots.txt协议及合理设定间隔时间以免给对方服务器造成过大压力。 ```python max_pages = 10 # 设定最大页数限制 for i in range(1, max_pages + 1): payload['page'] = str(i) response = requests.post(url, data=payload) if some_condition_to_stop: break process_data(response.text) # 对每页的结果做进一步分析加工 ``` 此部分实现了简单的顺序扫描流程,它会在每一次迭代前更新`payload`里的`page`项指向下一个编号的位置,然后重复调用之前介绍过的函数完成整个过程[^3]。
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值