Spider -- Url地址编码模块(urlencode({dict})、quote(string)、unquote(string))
1、模块名及导入
-
模块
# 模块名 urllib.parse
# 导入
import urllib.parse
from urllib import parse
-
作用
给URL地址中查询参数进行编码 编码前:https://www.baidu.com/s?wd=美女 编码后:https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3
2、常用方法
urllib.parse.urlencode({dict})
-
URL地址中一个查询参数
# 查询参数:{'wd' : '美女'} # urlencode编码后:'wd=%e7%be%8e%e5%a5%b3' # 示例代码 query_string = {'wd' : '美女'} result = urllib.parse.urlencode(query_string) # result: 'wd=%e7%be%8e%e5%a5%b3'
-
URL地址中多个查询参数
from urllib import parse params = { 'wd' : '美女', 'pn' : '50' } params = parse.urlencode(query_string_dict) url = 'http://www.baidu.com/s?{}'.format(params) print(url)
-
拼接URL地址的3种方式
# 1、字符串相加 baseurl = 'http://www.baidu.com/s?' params = 'wd=%E7XXXX&pn=20' url = baseurl + params # 2、字符串格式化(占位符) params = 'wd=%E7XXXX&pn=20' url = 'http://www.baidu.com/s?%s'% params # 3、format()方法 url = 'http://www.baidu.com/s?{}' params = 'wd=#E7XXXX&pn=20' url = url.format(params)
代码实现 - 03_parse_baidu.py
from urllib import request from urllib import parse # 拼接URL地址 def get_url(word): url = 'http://www.baidu.com/s?{}' # params: wd=%E7XXXXX params = parse.urlencode({'wd':word}) url = url.format(params) return url # 发请求,保存本地文件 def request_url(url,filename): headers = {'User-Agent':'Mozilla/5.0'} # 请求对象 + 响应对象 + 提取内容 req = request.Request(url=url,headers=headers) res = request.urlopen(req) html = res.read().decode('utf-8') # 保存数据 with open(filename,'w',encoding='utf-8') as f: f.write(html) # 主程序入口 if __name__ == '__main__': word = input('请输入搜索内容:') url = get_url(word) filename = word + '.html' request_url(url,filename)
quote(string)编码
-
示例1
from urllib import parse string = '美女' print(parse.quote(string)) # 结果: %E7%BE%8E%E5%A5%B3
改写之前urlencode()代码,使用quote()方法实现
from urllib import parse url = 'http://www.baidu.com/s?wd={}' word = input('请输入要搜索的内容:') query_string = parse.quote(word) print(url.format(query_string))
unquote(string)解码
-
示例
from urllib import parse string = '%E7%BE%8E%E5%A5%B3' result = parse.unquote(string) print(result)