Python 爬蟲 --- urllib
阿新 • • 發佈:2019-01-02
-s 屬性 proc tpc urlopen fire res win mat
對於互聯網數據,Python 有很多處理網絡協議的工具,urllib 是很常用的一種。
一、urllib.request,request 可以很方便的抓取 URL 內容。
- urllib.request.urlopen(url) 返回請求 url 後的二進制對象·
參數:url=‘http://www.baidu.com’,請求的 url。
data=None,請求的數據,可有可無,bytes 類型。
timeout=3,設置訪問超時時間,可有可無
cafile=None,HTTPS 請求 CA 證書
capath=None,CA 證書 path
context=None,指定 SSL 設置,可有可無,ssl.SSLContext 類型
- urllib.request.Request() 把請求獨立成一個對象,對請求參數的設定更方便靈活
參數:url,請求 url。
data=None,請求參數,可有可無
headers={},請求 header 參數。
origin_req_host=None,請求 host 或 IP
unverifiable=False,表明請求是否無法驗證,默認為 false
method=None,請求方法,get、post、put 等
- urllib.request.ProxyHandler() 設置代理,參數為 dict,如:{ ‘http‘: ‘120.194.18.90:81‘}
- urllib.request.build_opener() 構建 Opener,參數為上面設置的代理
- urllib.request.install_opener() 安裝 Opener,參數為上面構建的 opener
- urllib.request.HTTPCookieProcessor() cookie 操作,參數為 http.cookiejar.CookieJar() 得到的 cookie
from urllib importrequest,parse #url url = ‘http://fanyi.baidu.com/sug‘ #request data data = {‘kw‘: ‘python‘} data = parse.urlencode(data).encode(‘utf-8‘) #proxy proxy = {‘http‘: ‘120.194.18.90:81‘} proxy_handler = request.ProxyHandler(proxy) opener = request.build_opener(proxy_handler) request.install_opener(opener) #headers = { # ‘Content-Length‘: len(data), # ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0‘ #} #req = request.Request(url=base_url, data=data, headers=headers) req = request.Request(base_url, data) req.add_header(‘User-Agent‘, ‘Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0‘) rsp = request.urlopen(req) result = rsp.read().decode(‘utf-8‘) print(result)
#rsp 的屬性 print(‘返回數據類型: {}‘.format(type(rsp))) print(‘返回數據信息: {}‘.format(rsp)) print(‘header 信息: {}‘.format(rsp.info())) print(‘header 信息: {}‘.format(rsp.getheaders())) print(‘header 屬性信息: {}‘.format(rsp.getheader(‘Server‘))) print(‘響應狀態信息: {}‘.format(rsp.status)) print(‘響應狀態信息: {}‘.format(rsp.getcode())) print(‘響應的 URL: {}‘.format(rsp.geturl()))
#cookie 操作 from urllib import request from http impot cookiejar #獲取 cookie cookie = cookiejar.CookieJar() handler = request.HTTPCookieProcessor(cookie) opener = request.build_opener(handler) rsp = opener.open(‘http://www.baidu.com‘) res = rsp.read().decode(‘utf-8‘) print(res) #保存 cookie #FileCookieJar、MozillaCookieJar、LWPCookieJar,不同的保存格式 filename = ‘cookie.txt‘ cookie = cookiejar.MozillaCookieJar(filename) handler = request.HTTPCookieProcessor(cookie) opener = request.build_opener(handler) rsp = opener.open(‘http://www.baidu.com‘) cookie.save(igonre_discard=True, ignore_expires=True) #使用 cookie cookie cookiejar.MozillaCookieJar() cookie.load(‘cookie.txt‘, ignore_discard=True, ignore_expires=True) handler = request.HTTPCookieProcessor(cookie) opener = request.build_opener(handler) rsp = opener.open(‘http://www.baidu.com‘) res = rsp.read().decode(‘utf-8‘) print(res)
二、urllib.parse
- urllib.parse.urlparse() 將 URL 解析成元組形式
參數:
url,訪問 url
scheme,解析協議,https、http
allow_fragments=False,是夠帶有查詢參數
- urllib.parse.urlunparse() 將元組拼接成完整 url
- urllib.parse.urljoin() 拼接 url
#1 url = ‘https://www.baidu.com/s?‘ qs = {‘wd‘:‘python‘} qs = urllib.parse.urlparse(qs) full_url = url + qs #2 url = urllib.parse.urlparse(‘http://www.baidu.com/s?wd=python‘) print(url) #3 data = [‘http‘, ‘www.baidu.com‘, ‘s‘, ‘wd=python‘] print(urllib.parse.urlunparse(data)) #4 print(urllib.parse.urljson(‘http://www.baidu.com‘, ‘index.html‘))
三、urllib.error
通過 try...except 可以捕捉異常,error 分為 HTTPError,URLError
try: res = urllib.request.urlopen(url).open().decode(‘utf-8‘) print(res) except urllib.error.URLError as e: print(e) except urllib.error.HTTPError as e: print(e) except Exception as e: print(e)
四、urllib.robotparser
Python 爬蟲 --- urllib