爬虫類の学習 - 検証コード認識

  • アンチクローリングメカニズム: 検証コード、検証コード画像内のデータを識別し、ログインをシミュレートするために使用されます。

    • 検証コードの動作を特定する

  • 手動による肉眼認識 (推奨されません)

  • サードパーティの自動識別 (推奨)

  • Python サードパーティ ライブラリ: tesseract、ddddocr

  • 説明書

  • スーパーイーグルの使い方チュートリアル

  • 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

おすすめ

転載: blog.csdn.net/qq_61897309/article/details/128552232