Spider--Urlアドレスエンコーディングモジュール(urlencode({dict})、quote(string)、unquote(string))

9491 ワード

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符号化


例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復号


from urllib import parse
​
string = '%E7%BE%8E%E5%A5%B3'
result = parse.unquote(string)
print(result)