from urllib import request,parse
from urllib.error import HTTPError,URLError
from http import cookiejar
#定義一個類用來實現cookie的存儲
class Cookieset(object):
def __init__(self):
#這裏類似於創建一個容易用來存放你的cookie
cookie_object = cookiejar.CookieJar()
#這個作用是如果在執行opener時遇到了cookie就把cookie放到cookie_object裏面
handler = request.HTTPCookieProcessor(cookie_object)
#把opener變成類裏的屬性
self.opener = request.build_opener(handler)
#對象內的get方法
def get(self,url,headers=None):
#調用外部的get函數
return get(url,headers=headers,opener=self.opener)
#對象內的post方法
def post(self,url,form=None,headers=None):
return post(url,form=form,headers=headers,opener=self.opener)
#從下面的urlrequest詳細封裝了post方法函數
def post(url,form=None,headers=None,opener=None):
return urlrequests(url,form=form,headers=headers,opener=opener)
#從下面的urlrequest詳細封裝了get方法函數
def get(url,headers=None,opener=None):
return urlrequests(url,headers=headers,opener=opener)
#定義總方法
def urlrequests(url,form=None,headers=None,opener=None):
html_bytes = b''
#自定義請求名字
user_agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
if not headers:
headers = {
'User-Agent':user_agent
}
try:
#判斷是否給他傳遞了form參數
if form:
#把form裝換成字符串
form_str = parse.urlencode(form)
#把其轉換成bytes
form_bytes = form_str.encode('utf-8')
#調用函數
req = request.Request(url,data=form_bytes,headers=headers)
else:
req = request.Request(url,headers=headers)
# 判斷是否有opener傳入
if opener:
response = opener.open(req)
else:
response = request.urlopen(req)
html_bytes = response.read()
#異常捕獲
except HTTPError as e:
print(e)
except URLError as e:
print(e)
return html_bytes
if __name__ == '__main__':
pass
#在這裏你可以根據自己的需求傳入你自己的URL,headers和form;
#你也可以選擇get和post方法,方法是封裝在類裏面的函數
用cookie來通過一個簡單的登錄驗證的爬蟲方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.