文章目錄
- python爬蟲 -----圖書館搶座
- 驗證碼識別
- 分析登錄請求資訊
- 用戶登錄獲取請求資訊尤其是cookie
- 通過cookie獲取驗證碼
- 分析搶座請求資訊
- 利用保存的cookie會話發送post 以及get請求
- 搶座成功結果圖
- 利用多執行緒并發給多個賬號進行同步搶座
- 并發搶座成功截圖
python爬蟲 -----圖書館搶座
本人也是一位考研學子 奈何圖書館座位總搶不到 就利用學過的技術做了一個圖書館搶座系統,
主要原理是利用提交post表單的形式進行搶座,
驗證碼識別
整個爬蟲最難的可能就是驗證碼了,小編自然也走過很多歪路,有用過pytesseract識別,這pytesseract是真的垃圾,正確率不可直視 后來采用騰訊的一個介面進行測驗 介面測驗自然是可行的 奈何也得花個7-8秒 還不如手搶 在一次偶然的機會 通過文獻、百度終于找到了大哥muggle_ocr 這個大哥可是拯救我于水火之中啊 0.3秒識別 廢話不多說了代碼粘上
#file_name是驗證碼圖片路徑
with open(file_name, "rb") as f:
captcha_bytes = f.read()
text = sdk.predict(image_bytes=captcha_bytes)
分析登錄請求資訊
實質還是以post的形式提交表單,通過fiddler抓包得到,提交的資訊和請求頭如下:


用戶登錄獲取請求資訊尤其是cookie
登錄有一個重點就是利用session域保存一整個會話,為方便之后的獲取驗證碼,以及搶座做準備,然后進行簡單登錄吧代碼如下:
def login(self,username,password,quyu1,js3,zuoweihao):
ses = requests.session()
url='http://172.16.47.84/Login.aspx'
date={
'__VIEWSTATE': '/wEPDwUJODE2Mzg3MTk0ZGTiyMF48vnOd3k6J7zu3Z26Lhf+t0nElGTEKl9fwh3L8g==',
'__EVENTVALIDATION': '/wEWBAKm8rLABwLs0bLrBgLs0fbZDAKM54rGBkCiS2WHGa6+EL0Kh6yO5Ah09T75GOA5NPCLw47Aiepp',
'TextBox1': username,
'TextBox2': password,
'Button1': '登錄',
}
str = ''
ses.post(url,headers=headers01,data=date)
return str
通過cookie獲取驗證碼
根據登錄獲取的session域進行獲取驗證碼,保存在相應的路徑,代碼如下:
def yanzhengmaimage(self,ses):
str1 = ses.get("http://172.16.47.84/VerifyCode.aspx?", headers=headers01)
imagename=ses.__str__()[-19:-1]
with open('code02'+imagename+'.jpg', 'wb') as img:
img.write(str1.content)
分析搶座請求資訊

主要以下面代碼為主
利用保存的cookie會話發送post 以及get請求
def tomorrow(self,ses,quyu1='3',js3='207',zuoweihao='001'):
#quyu1 代表區域 1東區 2中區 3 西區
#js3 代表教室 正常三位數字
#zhuoweihao 代表座位號 3位數字
str=quyu1+js3+zuoweihao
url = 'http://172.16.47.84/Verify.aspx?seatid='+str
date = {
'__VIEWSTATE': '/wEPDwUKMTcwNzM5ODc3NGRkFTNhg2TJCMmXjk16k+jkM2+o35s9J3SOm+JNsHJEwo4=',
'__EVENTVALIDATION': '/wEWAwL5+IeIAgLs0Yq1BQKM54rGBlbX/7GsfmI6ZGnyG3S+AAk6bsW9xrBTrDecfP4rhl+R',
'TextBox3': '',
'Button1': '提 交',
}
# self.base6434(ses)
hi = ses.get(url, headers=headers01)
date['TextBox3'] = self.base6434(ses)
resp = ses.post(url, headers=headers02, data=date)
soup = BeautifulSoup(resp.text, 'lxml')
Soup = soup.find_all('script')[0]
print(Soup)
print(zuoweihao)
ses.close()
return Soup.text
搶座成功結果圖

先寫到這里 再更新 小編累了
利用多執行緒并發給多個賬號進行同步搶座
并發搶座成功截圖
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/191899.html
標籤:其他
