返回顶部

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)

 

 

posted @ 2020-04-06 15:40  Be-myself  阅读(340)  评论(0编辑  收藏  举报
levels of contents 点击查看具体代码内容