admin 管理员组

文章数量: 1086019

Python爬虫——Get和Post请求的使用

Python爬虫——Get和Post请求的使用

1、Get请求

GET请求一般用于我们向服务器获取数据( urllib默认使用get请求),比如搜索:毛不易,地址栏中的 URL 信息:

其中wd 表示搜索字符串的键,而“毛不易”则代表输入的值

在网页地址栏中删除wd后面多余的查询条件,最后显示的 URL 如下:

=毛不易

但在上图Headers请求头里,发送的请求是:

=%E6%AF%9B%E4%B8%8D%E6%98%93&ie=utf-8&tn=15007414_2_pg

同样删除wd后面多余的查询条件,最后显示的 URL 如下:

=%E6%AF%9B%E4%B8%8D%E6%98%93

? 后面出现的那个长长的字符串,就是搜索关键字“毛不易”的Unicode的编码格式。

quote()

quote(str):对字符串str进行Unicode编码,如:urllib.parse.quote(‘毛不易’)

import urllib.request
import urllib.parseurl = '='#调用quote()对关键字进行Unicode编码
name = urllib.parse.quote('毛不易')
#打印Unicode编码后的字符串
print(name)  #%E6%AF%9B%E4%B8%8D%E6%98%93
#拼接url
url = url+name
print(url)  #=%E6%AF%9B%E4%B8%8D%E6%98%93
#构建请求头
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.5261 SLBChan/10'}
request = urllib.request.Request(url=url,headers=headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
print(content)

执行结果:

urlencode()

urlencode():对查询字符串的字典进行编码,如下:

dict = {'wd':'毛不易','sex':'男','age':30
}
urllib.parse.urlencode(dict)

使用实例:

import urllib.request
import urllib.parsebase_url = '?'
param = {'wd':'毛不易','sex':'男','age':30
}#urlencode()对关键字进行Unicode编码
new_param = urllib.parse.urlencode(param)#打印Unicode编码后的字符串
print(new_param)
#拼接url
url = base_url+new_param
print(url)
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.5261 SLBChan/10'}
request = urllib.request.Request(url=url,headers=headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
print(content)

执行结果:

wd=%E6%AF%9B%E4%B8%8D%E6%98%93&sex=%E7%94%B7&age=30
=%E6%AF%9B%E4%B8%8D%E6%98%93&sex=%E7%94%B7&age=30

2、Post请求

post请求的参数不会拼接到ul后面,而是放在定制请求的第二个参数位置上

post请求的参数需要进行两次编码,第一次urlencode:对字典参数进行Unicode编码转成字符串,第二次encode:将字符串数据转换为字节类型

使用实例:

import urllib.request
import urllib.parse
import json#百度翻译
url = ''headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.5261 SLBChan/10'}#post请求参数
param = {'kw':'剪刀'
}#post请求参数需要进行两次编码,第一次urlencode:对字典参数进行Unicode编码转成字符串,第二次encode:将字符串数据转换为字节类型
param = urllib.parse.urlencode(param).encode('utf-8')#post定制请求可以使用位置传参
request = urllib.request.Request(url,param,headers)response = urllib.request.urlopen(request)
print(response)#解码读取数据
page = response.read().decode('utf-8')#反序列化,将字节对象转成python对象
content = json.loads(page)
print(content)
print(type(content))

执行结果:

<http.client.HTTPResponse object at 0x000002CFA6D04F60>{'errno': 0, 'data': [{'k': '剪刀', 'v': 'scissors; shears; forfex; clipper; [电影]Scissors'}, {'k': '剪刀石头布', 'v': '名. rock, paper,scissors'}, {'k': '剪刀手爱德华', 'v': '名. Edward Scissorhands'}]}<class 'dict'>

本文标签: Python爬虫Get和Post请求的使用