Python使用網絡抓包的方式,利用超級鷹平台識别驗證碼登入,《爬取古詩文網》。
上篇–識别驗證碼
序言:
哈喽,各位小可愛們,我又來了,這次我新學習到的内容是python爬蟲識别驗證碼。我這次用的是網絡抓包工具來爬取,就是直接使用Requests子產品進行抓取資料,除此之外還需要借助超級鷹平台進行驗證碼識别。
廢話不多說,直接上代碼:
import time
import requests
from chaojiying import Chaojiying_Client
time1=str(int(time.time()*1000))
url="https://so.gushiwen.cn/RandCode.ashx?"
f_url=url+time1
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.70"}
params={"t":time1}
response=requests.get(url=url,headers=headers,params=params)
img=response.content
with open("img.jpg","wb") as f:
f.write(img)
chaojiying = Chaojiying_Client('使用者名', '密碼', '軟體id') #使用者中心>>軟體ID 生成一個替換 96001
im = open('img.jpg', 'rb').read() #本地圖檔檔案路徑 來替換 a.jpg 有時WIN系統須要//
print("識别結果:",chaojiying.PostPic(im, 1902)["pic_str"])
上面是全部代碼,接下來就由我為大家進行詳細地講解…
1.導入相關子產品
在這裡我們需要調用的子產品有time,requests,以及從本地檔案中調取chaojiying相關類。
import time
import requests
from chaojiying import Chaojiying_Client
time1=str(int(time.time()*1000)) #導入相關子產品
1.time是用來計算時間戳(關于時間戳的解釋)的,以及time的具體用法。在這裡我們主要用的是time.time()方法,來傳回一個時間戳。
2.requests子產品模拟浏覽器發送請求,具體用到get方法,在我的爬取彼岸圖網的這篇文章中已經解釋了為什麼用get方法而不是post方法。
3.從本地檔案中引入相關子產品。
2.利用網絡抓包工具抓取url,并發起請求
首先,我們打開古詩文網,點選“我的”,進入登陸頁面,明确我們此次的目的是識别驗證碼。

然後,打開我們的抓包工具,就是點選滑鼠右鍵,會出現“檢查”選項,點選“檢查”,進入抓取界面。附圖:
這是我們打開抓包界面之後的出現的界面:
點選驗證碼,檢視抓包界面中的”network"或者是“網絡”選項,之後會出現一張圖檔的連結(圖檔的格式一般是jpg或者gif):
再點選它,出現:
1.我們用到的具體資訊就是紅線圈出的部分。檢視“請求URL”中的upl資訊,我們可以發現問号之後的url資訊就是我們上面列的第二張圖的“t”!
2.再看一下發現,這是get請求。
3.“t”的資訊是什麼?我們了解到驗證碼它随時更換的,假如你在一段時間不輸入驗證碼,就算有這個驗證碼,伺服器也會給你報錯“驗證碼錯誤”。是以我們猜想,“t”或許跟時間戳有關。
4.我們驗證一下發現“t”就是時間戳*1000,再去掉小數位!!
是以就有了下面的代碼:
time1=str(int(time.time()*1000))#将時間戳轉化為params參數中的 “t”
url="https://so.gushiwen.cn/RandCode.ashx?"
f_url=url+time1 #驗證碼圖檔的url,運用到了字元串的拼接
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.70"}#UA僞裝
params={"t":time1}
response=requests.get(url=url,headers=headers,params=params) #get方法發起請求
3.擷取響應資料,并儲存到本地
為什麼要儲存資料呢?
因為超級鷹平台有一個寫好的檔案裡需要用到“這個檔案路徑”。超級鷹檔案部分代碼如下:
if __name__ == '__main__':
chaojiying = Chaojiying_Client('使用者名', '使用者密碼', '軟體id') #使用者中心>>軟體ID 生成一個替換 96001
im = open('檔案路徑', 'rb').read() #本地圖檔檔案路徑 來替換 a.jpg 有時WIN系統須要//
print (chaojiying.PostPic(im, 檔案類型)) #1902 驗證碼類型 官方網站>>價格體系 3.4+版 print 後要加()
儲存資料的代碼如下:
img=response.content #将資料轉化成二進制位元組流
with open("img.jpg","wb") as f:
f.write(img) #with open方法
4.導入chaojiying檔案相關子產品,擷取驗證碼資訊
chaojiying = Chaojiying_Client('c1234567', 'Wasd11314788', '919951') #使用者中心>>軟體ID 生成一個替換 96001
im = open('img.jpg', 'rb').read() #本地圖檔檔案路徑 來替換 a.jpg 有時WIN系統須要//
print("識别結果:",chaojiying.PostPic(im, 1902)["pic_str"] #擷取驗證碼)
超級鷹擷取的驗證碼資訊在“chaojiying.PostPic(im,1902)”這個字典裡,要想通路字典的值,就需輸入字典的鍵。
好啦,今天的内容就到此結束了,謝謝你的閱讀!!!如果覺得還行,就點個小小的贊吧!
文 | 戴眼鏡的it小孩紙