urllib.parse模块
parse.urlencode() 可以对k-v字典数据进行编码,对url进行编码可以让网站方便读取我们想要获取的信息,以免产生歧义。
from urllib.parse import unquote, urlencode
data = {
"name": "Tom",
"country": "美国",
"age": 23
}
# 编码
print(urlencode(data))
# name=Tom&country=%E7%BE%8E%E5%9B%BD&age=23
# 解码
print(unquote("name=Tom&country=%E7%BE%8E%E5%9B%BD&age=23"))
# name=Tom&country=美国&age=23
————————————————
版权声明:本文为CSDN博主「彭世瑜」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mouday/article/details/103703122
例:
- 定义url和需要编码的字典变量
- 对字典变量进行url编码;parse.urlencode(dic)
- 将url与编码后的字典组合
from urllib import parse
base_url = 'http://cn.bing.com/search'
d = {'q': '三国'}
dic_ed = parse.urlencode(d) # url编码
url = '{}?{}'.format(base_url, dic_ed)
print(url)
print(parse.unquote(url)) # url解码
输出:
unquote(url)可以对已经编码的url进行解码
http://cn.bing.com/search?q=%E4%B8%89%E5%9B%BD
http://cn.bing.com/search?q=三国
第一行为我们目标URL
提交方法
最常用的HTTP交互数据的方法时GET, POST。
GET方法,数据是通过URL传递的,也就是说数据是在HTTP报文的header部分。
POST方法,数据是放在HTTP报文的body部分提交的。
数据都是键值对的形式,多个参数之间使用&符号连接。
例如a=1&b=abc
GET方法
from urllib import parse
base_url = 'http://cn.bing.com/search'
d = {'q': '三国'}
dic_ed = parse.urlencode(d) # url编码
print(dic_ed)
url = '{}?{}'.format(base_url, dic_ed)
# d = parse.unquote(u) # url解码
print(url)
print(parse.unquote(url))
from urllib.request import urlopen, Request
ua = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"
req = Request(url, headers={
'User-agent': ua
})
with urlopen(req) as res:
with open('/path/myspider/bing.html',
'wb+'
) as f:
f.write(res.read())
f.flush()
POST方法
from urllib import parse
from urllib.request import urlopen, Request
import simplejson
url = 'http://httpbin.org/post'
data = parse.urlencode({
'name': '张三,@=/&*',
'age': '6'
}) # body
ua = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"
req = Request(url, headers={'User-agent': ua})
with urlopen(req, data=data.encode()) as res: # post请求,data不能是None
# with open('/path/myspider/bing.html',
# 'wb+'
# ) as f:
# f.write(res.read())
# f.flush()
text = res.read()
d = simplejson.loads(text) # 对获取的数据进行转换
print(d)