1.基礎請求框架
from urllib import request url=r"http://www.baidu.com" req=request.Request(url) #構造請求 response=request.urlopen(req).read().decode() #獲取響應 print(response)
2.自定義header
from urllib import request import re headers={ "User-Agent":"Mozilla/5.0" } url=r"http://www.baidu.com" req=request.Request(url,headers=headers) #構造請求 response=request.urlopen(req).read().decode() #獲取響應 pat=r"<title>(.*?)</title>" #正則匹配規則 data=re.findall(pat,response) #正則匹配篩選 print(data)
3.利用隨機數隨機更換agent
from urllib import request import re import random #將多個user-agent值放入list agentlist=["Mozilla/5.0", "Mozilla/5.0", "Mozilla/5.0"] #利用隨機數隨機取一個agent agent=random.choice(agentlist) print(agent) headers={ "User-Agent":agent } url=r"http://www.baidu.com" req=request.Request(url,headers=headers) #構造請求 response=request.urlopen(req).read().decode() #獲取響應 pat=r"<title>(.*?)</title>" #正則匹配規則 data=re.findall(pat,response) #正則匹配篩選 print(data)
urlopen是一個特殊的opener(模塊構建的)
urlopen()方法不支持代理、cookie等其他的HTTP/HTTPS高級功能。
要支持這些功能:通過request.build_opener()方法創建自定義opener對象。
使用自定義的opener對象,調用open()方法發送請求。
如果程序里所有請求都使用自定義opener,可以使用request.install_opener()將自定義的opener對象定義為全局opener,表示如果之后凡是調用urlopen,都將使用這個opener。
from urllib import request import re headers={ "User-Agent":"Mozilla/5.0" } url=r"http://www.baidu.com" #構建HTTP處理器對象(專門處理HTTP請求的對象) http_hander=request.HTTPHandler() #創建自定義opener opener=request.build_opener(http_hander) #創建自定義請求對象 req=request.Request(url,headers=headers) #發送請求,獲取響應 response=opener.open(req).read().decode() pat=r"<title>(.*?)</title>" data=re.findall(pat,response) print(data) #把自定義opener設置為全局,這樣用urlopen發送的請求也會使用自定義的opener request.install_opener(opener) #此時的urltopen也會使用自定義的opener test=request.urlopen(req)