Get和Post区别

本文介绍了GET和POST请求的区别,GET是直接发送数据,而POST需要两次交互。重点讲述了如何使用Python的requests库进行模拟登陆,包括分析POST请求的表单数据、使用Session处理cookies。此外,还演示了如何从网页中提取视频下载链接,展示了爬虫的基本流程和技术,包括使用BeautifulSoup解析HTML和处理下载链接。
摘要由CSDN通过智能技术生成

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

 

GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。

GET请求,通常用来获取静止数据,例如简单的网页和图片。

POST请求通常用来获取的数据,取决于我们发给服务器的数据,例如用户名和密码。

 

如何查看请求类型

我们打开开发者工具,点击Network选单,任意点击一个请求就可以看到它请求的类型。

GET请求

POST请求

今天的目标

我们的目标是什么?当然是没有蛀牙。

呸!

事情是这样的,前几个月老师派我们去参加了泰迪杯的教练员培训,培训是全程录像的。老师希望我们能够把录像的视频发给他。

视频有这么多

大概看了一下,视频有这么多!一个一个下载,那不是虐待自己嘛!

那怎么办?要不用爬虫来下载吧。

模拟登陆

由于泰迪杯网站问题,测试之后发现无法用正常的账号密码登陆,这里会使用访客账号登陆,其他网站分析步骤和此一致。

我们先打开泰迪杯的登陆界面,打开开发者工具,选择Network选单,点击访客登陆。

操作流程

注意到index.php的资源请求是一个POST请求,我们把视窗拉倒最下面,看到表单数据(Form data),浏览器在表单数据中发送了两个变量,分别是usernamepassword,两个变量的值都是guest。这就是我们需要告诉网站的信息了。

知道了这些信息,我们就可以使用requesst来模拟登陆了。

import requests

s = requests.Session()

data = {
    'username': 'guest',
    'password': 'guest',
}

r = s.post('http://moodle.tipdm.com/login/index.php', data)
print(r.url)

同样的,在第一行我们引入requests包。但与上次不同的是我们这次并没有直接使用request.post(),而是在第二行先创建了一个Session实例s,Session实例可以将浏览过程中的cookies保存下来。

我们先来简单认识一下cookies是什么:

cookies指网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)
来源:维基百科

换句话说,泰迪杯的网站要聪明一点,不是只是用GET请求传递的数据来确认用户身份,而是要用保存在本地的cookies来确认用户身份(你再也不能伪装成隔壁老王了)。

在python2.7大家通常使用urllib和urllib2包中,有一套很复杂的代码来储存cookies。但是在requests中,我们只要创建一个Session实例(比如这里的s),然后之后的请求都用Session实例s来发送,cookies的事情就不用管了。

我们再来看这几行代码:

data = {
    'username': 'guest',
    'password': 'guest',
}

r = s.post('http://moodle.tipdm.com/login/index.php', data)

s.post()和上次教程中的requests.get()是相对应的,一个发送POST请求,一个发送GET请求。上一篇中我们并没有介绍Session实例,所以用的requests。在之后的请求发送中,大家尽量多使用s.get()s.post(),这样可以避免很多错误。

POST请求在之前讲过了,是一定要向服务器发送一个表单数据(form data)的。那这个数据到底怎么发送,发送什么呢?答案就在开发者工具的Form Data里面。

右下角有Form Data

我们看到泰迪杯网站要求上传的表单数据就是usernamepassword,两者的值都是guest,所以在python里面我们创建一个dict,命名为data,里面的数据就输入usernamepassword。最后再用s把数据post到网址,模拟登陆就完成了。

我们运行一下代码,

登陆成功了

可以看到网址跳转到了泰迪杯教程的首页,和在浏览器里面的行为是一样的。

恭喜你,你已经学会了如何模拟登陆一个网站。你可以给你自己鼓鼓掌?,然后我们开始进入下一个部分。

视频下载

我们进入到我们要下载的视频的页面,然后对要下载的链接进行审查元素。

元素都在`a`标签中

使用上篇教程中的分析方法我们不难发现,所有这样的a标签(a tag)都在<div class="activityinstance">标签中。所以我们只要找到所有的class为acticityinstance的div标签,然后提取里面a标签的href属性,就知道视频的地址了对吧?

同样的,我们使用beautiful soup包来实现我们想要的功能。

from bs4 import BeautifulSoup

r = s.get('http://moodle.tipdm.com/course/view.php?id=16')
soup = BeautifulSoup(r.text, 'lxml')
divs = soup.find_all("div", class_='activityinstan
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值