1.1.urlopen函數的用法
#encoding:utf-8 from urllib import request res = request.urlopen("https://www.cnblogs.com/") print(res.readlines()) #urlopen的參數 #def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, # *, cafile=None, capath=None, cadefault=False, context=None):
1.2.urlretrieve函數
將網頁上的文件保存到本地
#coding:utf-8 from urllib import request res = request.urlretrieve("https://www.cnblogs.com/",'cnblog.html') #urlretrieve參數 #def urlretrieve(url, filename=None, reporthook=None, data=None):
1.3.參數編碼和解碼函數
urlencode函數用於編碼中文和特殊字符
#urlencode函數 # 簡單用法 #from urllib import parse # data = {'name':'德瑞克','age':100} # qs = parse.urlencode(data) # print(qs) #name=%E5%BE%B7%E7%91%9E%E5%85%8B&age=100 #實際用例 from urllib import request,parse url = "http://www.baidu.com/s" params = {"wd":"博客園"} qs = parse.urlencode(params) url = url + "?" + qs res = request.urlopen(url) print(res.read())
parse_qs函數用於將經過編碼后的url參數進行解碼。
from urllib import parse qs = "name=%E5%BE%B7%E7%91%9E%E5%85%8B&age=100" print(parse.parse_qs(qs)) #{'name': ['德瑞克'], 'age': ['100']}
1.4.urlparse和urlsplit函數用法
urlparse和
urlsplit都是用來對url的各個組成部分進行分割的,唯一不同的是urlsplit沒有"params"這個屬性.
from urllib import request,parse url = "https://www.baidu.com/s?wd=cnblog#2" result = parse.urlparse(url) print(result) #ParseResult(scheme='https', netloc='www.baidu.com', path='/s', params='', query='wd=cnblog', fragment='2') print('scheme:',result.scheme) #協議 print('netloc:',result.netloc) #域名 print('path:',result.path) #路徑 print('query:',result.query) #查詢參數 #結果 #scheme: https # netloc: www.baidu.com # path: /s # query: wd=cnblog
1.5.Request爬去拉勾網職位信息
Request類的參數
class Request: def __init__(self, url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None):
爬去拉鈎網職位信息
拉勾網的職位信息是在Ajax.json里面
代碼:
#利用Request類爬去拉勾網職位信息 from urllib import request,parse url = "https://www.lagou.com/jobs/positionAjax.json?city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false" #請求頭 headers = { "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36", "Referer":"https://www.lagou.com/jobs/list_python?city=%E5%8C%97%E4%BA%AC&cl=false&fromSearch=true&labelWords=&suginput=" } #post請求需要提交的數據 data = { 'first':'true', 'pn':1, 'kd':'python' } #post請求的data數據必須是編碼后的字節類型 req = request.Request(url,headers=headers,data=parse.urlencode(data).encode('utf-8'),method='POST') #建立一個請求對象 res = request.urlopen(req) #獲取的信息是字節類型,需要解碼 print(res.read().decode('utf-8'))
1.6.ProxyHandler代理
代理原理:在請求目的網站之前,先請求代理服務器,然后讓代理服務器去請求目的網站,獲取到數據后,再返回給我們。
#代理的使用 from urllib import request url = "https://www.baidu.com/s?wd=cnblog" #1.使用ProxyHandler傳入代理構建一個handler # handler = request.ProxyHandler({'http':'115.210.31.236.55:9000'}) handler = request.ProxyHandler({'http':'115.210.31.236.55:9000'}) #2.使用創建的handler構建一個opener opener = request.build_opener(handler) #3.使用opener去發送一個請求 res = opener.open(url) print(res.read())