一、入門案例
urllib的request模塊urlopen方法默認發送一個GET請求到指定的頁面,然後返回HTTP的響應。通過read方法可以得到響應的內容,是byte類型的。
from urllib import request
# 通過 urlopen 方法訪問 url,得到 response 響應
response = request.urlopen('http://www.baidu.com')
# 打印響應回來的內容
print(response.read())
二、發送post請求
import urllib.request as ur
import urllib.parse as up
# 構建 post 請求發送的數據
post_data = {'username':'name1','password':'pass1',}
# url 編碼
post_data = up.urlencode(post_data)
# 發送請求,data 不位 None 就是 post 請求
response = ur.urlopen(url='http://www.baidu.com',data=post_data)
# 打印
print(response.read())
當urlopen方法的data參數不爲None時,發送的就是post請求,
data參數的值需要通過parse.urlencode方法進行編碼。
三、Request對象
上面介紹了用urllib發送get請求和post請求的方法,當需要加入
請求頭時,就要用到Request對象了。
參數 | 含義 |
---|---|
url | 請求地址 |
data=None | 數據,默認爲None,不爲None變成 post 請求,否則 get |
headers={} | 請求頭 |
origin_req_host=None | 請求源地址 |
method=None | 請求方法,當data=None時,默認爲get請求,否則爲post |
構造Request對象,發送post請求,並添加請求頭。
import urllib.request as ur
# 構造 header
myheader = { 'user_agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36',}
# 構造 request 對象
request = ur.Request(user=…,headers=myheader)
# 發送請求
response = ur.urlopen(request)
# 打印
print(response.read())
除了可以在構造Request對象是添加headers,還可以通過Request對象的add_headers方法
request.add_header(‘User-Agent’,’………’)
四、opener
創建opener對象發送請求
import urllib.request as ur
# 創建 opener 對象
myopener = ur.build_opener()
# 創建 request
request = ur.Request(url='',data='',headers={})
# 發送請求和打印
response = myopener.open(request)print(response.read())
添加代理ip
import urllib.request as ur
# 代理 ip 地址
proxy_ip_port = { 'http':'192.168.1.1:80'}
# 創建代理 handler
proxy_handler = ur.ProxyHandler(proxy_ip_port)
# 創建 opener
myopener = ur.build_opener(proxy_handler)
# 創建 request 併發送
# ......
使用cookiejar獲取cookie
import urllib.request as ur
from http import cookiejar
# 實例化 cookie 對象
cookie = cookiejar.CookieJar()
# 創建 cookie 的 processor 對象
cookie_handler = ur.HTTPCookieProcessor(cookie)
# 創建 opener 對象
myopener = ur.build_opener(cookie_handler)
# 發送請求得到響應
request = ur.Request(url='http://www.baidu.com')
response = myopener.open(request)
# 打印 cookie
print(cookie)