天天看點

Python使用網絡抓包的方式,利用超級鷹平台識别驗證碼登入爬取古詩文網、上篇--識别驗證碼

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,并發起請求

首先,我們打開古詩文網,點選“我的”,進入登陸頁面,明确我們此次的目的是識别驗證碼。

Python使用網絡抓包的方式,利用超級鷹平台識别驗證碼登入爬取古詩文網、上篇--識别驗證碼

然後,打開我們的抓包工具,就是點選滑鼠右鍵,會出現“檢查”選項,點選“檢查”,進入抓取界面。附圖:

Python使用網絡抓包的方式,利用超級鷹平台識别驗證碼登入爬取古詩文網、上篇--識别驗證碼

這是我們打開抓包界面之後的出現的界面:

Python使用網絡抓包的方式,利用超級鷹平台識别驗證碼登入爬取古詩文網、上篇--識别驗證碼

點選驗證碼,檢視抓包界面中的”network"或者是“網絡”選項,之後會出現一張圖檔的連結(圖檔的格式一般是jpg或者gif):

Python使用網絡抓包的方式,利用超級鷹平台識别驗證碼登入爬取古詩文網、上篇--識别驗證碼

再點選它,出現:

Python使用網絡抓包的方式,利用超級鷹平台識别驗證碼登入爬取古詩文網、上篇--識别驗證碼
Python使用網絡抓包的方式,利用超級鷹平台識别驗證碼登入爬取古詩文網、上篇--識别驗證碼

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小孩紙