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

在这里插入图片描述

爬虫中在网页中进行检查,查看Network的内容,可以发现Request Method项会显示GET或者POST(如下图),这就代表在爬虫的过程中需要使用不同的方法才能够获取到想要获取的网页内容。本文简要介绍了两者的区别及如何获取这两种网页的内容。

在这里插入图片描述


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) # 获取结果

网页检查的结果:

在这里插入图片描述
提交的信息在Form Data中:

在这里插入图片描述
运行结果:

在这里插入图片描述

总结

上面的例子都是最简单的例子,真正实际应用中遇到的问题可能会十分棘手,只会上述这些是远远不够的。但是了解到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):

在这里插入图片描述

叮!

很久没写啦,以后一定要按时写呀!

参考:https://mofanpy.com/
参考:https://www.cnblogs.com/liziweiblog/p/11066333.html
参考:https://zhidao.baidu.com/question/87535798.html

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值