利用urllib处理get请求,post请求,ajex数据加载,cookie模拟登陆问题

1.GET请求示例分析
以百度搜索为例http://www.baidu.com我们输入hello关键词进行查询,然后按回车键我们发现url变成https://www.baidu.com/s?wd=hello。我们可以发现对应的查询信息是通过url传递的,这里采用的请求方式就使用get请求来查询。那我们怎么用爬虫实现这一过程呢?
我们可以利用urllib库来实现拼接下面是代码实现:

import urllib.request
import urllib.parse

url = "http://www.baidu.com/s?wd="
key = "你好"
key_code = urllib.request.quote(key)   #对中文字符进行编码
url_all = url + key_code  #对中文字符进行拼接

header = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"}

request = urllib.request.Request(url_all,headers=header)
reponse = urllib.request.urlopen(request).read()

在这里插入图片描述

总结:主要使用request.quote编码之后进行url的拼接

2.POST请求示例分析
这里我们使用一个post表单的测试网页,网站为http://www.iqianyue.com/mypost
我们发现在我们输入登录信息时,他的url未发生改变。同时 我们在进行注册,登录等操作的时候,基本都会遇到POST请求。那我们应该如何通过爬虫输入登录信息呢?
第一步.检查form表单,获得属性名
我们需要检查当前网站的原代码,找到对应的form表单部分,然后进行分析。可以得到测试网页的字段名分别是“name”,‘pass’。如下图:
在这里插入图片描述

第二步利用urllib.parse.urlencode对数据进行编码处理
向urlencode传递一个字典参数,返回data类型的参数同时需要利用encode(‘utf8’)进行转码或者利用bytes函数,在利用Request构造一个带有data的请求。代码如下

import urllib.request
import urllib.parse

url='http://www.iqianyue.com/mypost'
header={
   'User-Agent':'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}

data={'name':'caipeng','pass':'123'}
postdata=urllib.parse.urlencode(data).encode('utf8') #进行编码
request=urllib.request.Request(url,postdata)
reponse=urllib.request.urlopen(request).read()

效果图如下:
在这里插入图片描述
在这里插入图片描述

3.ajex数据加载
在开始解决问题之前我们需要安装一个抓包工具:mac推荐charles,win推荐fiddler。
我们都知道ajex数据都是以json类型保存的,所以我们的目标可以着眼于获得他的json数据。
我们以https://movie.douban.com/tag/#/?sort=U&range=0,10&tags=%E5%89%A7%E6%83%85网站为例
在这里插入图片描述
我们通过抓包工具找到了发送请求formdata
在这里插入图片描述
那么我就可以通过构造一个url请求来获得他的json数据
代码如下:

formdata = {
''sort":"U",
"range":"0,10",
"tags":"",
"start":"20",
"genres":"剧情"
}
data = urllib.parse.urlencode(forndata).encode("utf8")
req = urllib.request.Request(url,data)

结果如下图在这里插入图片描述

4.cookie模拟登陆
利用抓包工具获得已经登陆时的cookie信息,将cookie信息保存到http报头信息后,包装url请求即可实现cookie的模拟登陆。
即图中所画部分
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/caipengbenren/article/details/83038938