问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

爬虫中常见的post和get有什么区别

创作时间:
作者:
@小白创作中心

爬虫中常见的post和get有什么区别

引用
CSDN
1.
https://blog.csdn.net/keepaware/article/details/109123995

在爬虫开发中,GET和POST是两种常见的HTTP请求方法。它们在使用场景、数据传输方式和安全性方面存在显著差异。本文将通过代码示例和详细解释,帮助读者理解这两种方法的区别,并掌握如何在爬虫中正确使用它们。

GET方法

GET方法是最常见也是最简单的,可以直接将URL输入,不需要其它的转换,即所有需要请求的信息都包含在URL中。

import requests  # 一个python模块,需要额外安装 pip install requests即可
url = 'https://blog.csdn.net/keepaware'  # 要爬取的网址即统一资源定位符 (Uniform Resource Locator)
headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \
(KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'}
# headers即请求头,在请求某些页面时,由于网站有反爬机制,因此需要请求头,爬虫程序通过加上请求头伪装成浏览
# 器的样子,就能够爬取某些爬不到的网页啦。但是不是所有网页都有效,毕竟别人可能有反爬机制。
text = requests.get(url,headers = headers).text   
# requests携带的get方法可以直接获取网页源代码,即网页上点击查看网页源代码的样子
# .text将获取到的内容转为文本格式
print(text)  # 查看网页源代码内容
# 结果就不展示啦

POST方法

import requests 
# 'http://pythonscraping.com/pages/files/form.html'   
# 看教程看到的很简单的一个网页,临时我也找不到其它简单的网页了。:(
# 在这个网页上可以填入firstname及lastname字符,然后submit返回hello there加上刚刚填入的内容,可以看到
# 提交后的网页变为了'http://pythonscraping.com/pages/files/processing.php',若是直接访问此网页,则只
# 看到hello there,并没有之前提交的信息。点击检查网络内容如下图。这就是post的特点所在了,根据提交信息不
# 同,返回不同信息
# 要获取网页,则需要额外传输信息。
headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \
(KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'}
url = 'http://pythonscraping.com/pages/files/processing.php'  # 要爬取的网页,但需要额外的信息
data = {'firstname':'ni','lastname':'hao'} # 需要传入的数据
result = requests.post(url,data=data,headers=headers)  # 获取网页时传入数据
print(result.text) # 获取结果

总结

上面的例子都是最简单的例子,真正实际应用中遇到的问题可能会十分棘手,只会上述这些是远远不够的。但是了解到post和get的区别是很必要的,毕竟是作为网页中最基础的存在。

总结一下,实际上就是post是要携带用户信息的请求方式,get则是根据URL直接获取网页信息(即某个网址所包含的信息)。post要获取的内容只靠网址是不能获取到的,需要提交一些额外的信息,这种信息在不同的网页中发挥不同功能。例如在查询天气的网页,可能就是要输入城市信息;在登录某些网页时,又是账号和密码的载体。从这些可以看出get方法获取到的内容是稳定的(即每个人打开某个网页获得的信息相同),但是使用post需要输入特定信息,那么得到的网页内容就会有特异性。

post每次获取某个特定网页都需要输入额外信息,但get则直接输入URL即可(),这样也能看出post方法更加安全,因为额外信息不会直接暴露在网址上。

此外,post与get不同的地方还在于post发送两个TCP数据包,其要先发送header,服务器返回100 continue时才再传送data,而get则是全部信息都存在URL地址上,因此只需要一个数据包。(不是很懂,但是这个区别会导致post可能比get效率稍低一点。)

还有网上的回答,也贴在这里吧(应该会更全面一点,来自https://zhidao.baidu.com/question/87535798.html):

参考资料

  1. https://mofanpy.com/
  2. https://www.cnblogs.com/liziweiblog/p/11066333.html
  3. https://zhidao.baidu.com/question/87535798.html
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号