アンチクローリングメカニズム: 検証コード、検証コード画像内のデータを識別し、ログインをシミュレートするために使用されます。
- 検証コードの動作を特定する
手動による肉眼認識 (推奨されません)
サードパーティの自動識別 (推奨)
Python サードパーティ ライブラリ: tesseract、ddddocr
pip install ddddocr -i https://pypi.tuna.tsinghua.edu.cn/simple
説明書
スーパーイーグルの使い方チュートリアル
1. 登録してログインします
2. 質問ポイントを購入する
3. ユーザーセンター→ソフトウェアID→ID生成→送信
4. 開発ドキュメント→Pythonデモダウンロード
5. 同じ階層のディレクトリに配置し、調整します。
コーディング プラットフォームを使用して検証コードを識別するコーディング プロセス:
確認コードのイメージをローカルにダウンロードする
プラットフォームが提供するサンプルコードを呼び出して画像データを識別する
例
Gushiwen.com から確認コードを取得します。
# 识别古诗文网验证码登录
import requests
from lxml import etree
import ddddocr
from chaojiying import Chaojiying_Client
if __name__ == '__main__':
# 获取验证码图片,并保存验证码图片到本地
url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54'
}
page_text = requests.get(url=url, headers=headers).text
tree = etree.HTML(page_text)
img_src = tree.xpath('//*[@id="imgCode"]/@src')[0]
img_src = 'https://so.gushiwen.cn' + img_src
print(img_src)
img_data = requests.get(url=img_src, headers=headers).content
with open('a.jpg', 'wb') as fp:
fp.write(img_data)
# # 调用打码平台的示例层序进行验证码图片数据识别
# chaojiying = Chaojiying_Client('账户', '密码', '943457') # 用户中心>>软件ID 生成一个替换 96001
# im = open('a.jpg', 'rb').read() # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
# code_tag = chaojiying.PostPic(im, 1902) # 1902 验证码类型 官方网站>>价格体系 3.4+版 print 后要加()
# # print(code_tag)
# # print(code_tag['pic_str'])
# code = code_tag['pic_str']
ocr = ddddocr.DdddOcr()
with open('a.jpg', 'rb') as f:
img_bytes = f.read()
res = ocr.classification(img_bytes)
print(res)
古代の詩の Web サイトへのログインをシミュレートする
import ddddocr
import requests
from lxml import etree
if __name__ == '__main__':
# 1、获取验证码图片的文字数据
url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54'
}
session = requests.Session()
page_text = session.get(url=url, headers=headers).text
tree = etree.HTML(page_text)
img_src = 'https://so.gushiwen.cn' + tree.xpath('//*[@id="imgCode"]/@src')[0]
# print(img_src)
code_data = session.get(url=img_src, headers=headers).content
with open('./a.jpg', 'wb') as fp:
fp.write(code_data)
ocr = ddddocr.DdddOcr()
with open('a.jpg', 'rb') as f:
img_bytes = f.read()
code = ocr.classification(img_bytes)
print(code)
# 2、对post请求进行发送(处理请求参数)
post_url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
param = {
'__VIEWSTATE': 'LEVhj4L7rIz3Bvtl1Qic94SRQ5LHyhp7oQWBifUJ + 3zDwdL8028kq2H2W6DgoZ9dus1rxfSVJQ8uQ1lzvRRLhN7GzwDpp9NUOXorj + Wa92FiThQWYzr0LDyce + 66vAvYO1 / rlwt4q0ul6 + jImgjl7J6ndHs =',
'__VIEWSTATEGENERATOR': 'C93BE1AE',
'from': 'http://so.gushiwen.cn/user/collect.aspx',
'email': '账户',
'pwd': '密码',
'code': code,
'denglu': '登录',
}
login_text = session.post(url=post_url, params=param, headers=headers)
print(login_text.status_code)
login_text = login_text.text
url2 = 'https://so.gushiwen.cn/user/collect.aspx'
login_text2 = session.post(url=url2, headers=headers).text
print(login_text2)
with open('./古诗文.html', 'w', encoding='utf-8') as fp:
fp.write(login_text2)
# 3、对响应数据进行持久化储存
ログインボタンをクリックするか、投稿リクエストを開始した後
投稿リクエストには、ログイン前に入力された関連するログイン情報 (ユーザー名、パスワード、確認コードなど) が含まれます。
検証コード: リクエストごとに変更されます
- Cookie関連の操作
http/https プロトコルの特性: ステートレス
対応するページ データがリクエストされなかった理由: 個人ホームページ ページに基づく 2 番目のリクエストが開始されたとき、サーバーはそのリクエストがログイン リクエストに基づくものであることを知りませんでした。
Cookie: サーバーがクライアントの関連ステータスを記録できるようにするために使用されます。
クッキーを追加する
1. 手動追加: パケット キャプチャ ツールを通じて Cookie 値を取得し、その値をヘッダーにカプセル化して、リクエストのパラメーターとして使用します。
2. 自動追加
Cookie 値のソース: ログイン後のリクエストをシミュレートした後にサーバーによって作成されます。
セッションセッションオブジェクト:
リクエストを送信できます
リクエスト中に Cookie が生成された場合、Cookie はセッション オブジェクトに自動的に保存/転送されます。
説明書:
0. セッション オブジェクトを作成します: session=requests.Session()
1、使用session对象进行模拟登录post请求的发送(cookie就会被储存在session对象中)
2、使用已经储存了cookie的session对象在对相应页面进行get请求发送(携带了cookie)
- 代理:破解封ip这种反爬机制
什么是代理:代理服务器
代理的作用:
突破自身ip访问的限制
可以隐藏自身真实的ip
代理相关网站
快代理
西祠代理
代理类型:
http:应用到http协议对应的url当中
https:应用到https协议对应的url当中
代理ip的匿名度
透明:服务器知道该次请求使用了代理,也知道该次请求对应的真实ip
匿名:服务器知道该次请求使用了代理,不知道该次请求对应的真实ip
高匿名:服务器不知道该次请求使用了代理,更不知道该次请求对应的真实ip