爬虫類学習ノート-requests

5147 ワード

爬虫類の用途
  • 爬虫類のデータはデータ分析または人工知能にサービスを提供し、訓練データ
  • ウェブサイトのためにデータの展示をします
  • 微博、掲示板などの社交属性のデータ、世論分析、広報
  • に用いる
  • 金融データ(株式情報)、投資意思決定
  • 12306切符を奪う
  • サイトでの投票
  • メール爆撃:60の登録サイトを探して、シミュレーションは各サイトにメール検証コードを送信させて、循環を行って、毎秒1つを送信して、メール爆撃
  • を実現します
    爬虫類の概念
    シミュレーションブラウザがリクエストを送信し、リクエスト応答を取得
    爬虫類の流れ
    url->リクエストの送信、レスポンスの取得->データの抽出->保存、レスポンスの取得->urlアドレスの抽出、リクエストの続行
    pagerankアルゴリズム、Webページランキング
    robotsプロトコル
    検索エンジンの爬虫類が這い出すデータの範囲を制限するが、道徳的な制約にすぎない.
    httpとHTTPSの復習
    urlの形式
    urlの形式:scheme://host[:port#]/path/…/[?query-string][#anchor]
  • scheme:プロトコル(例:http,https,ftp)
  • host:サーバのIPアドレスまたはドメイン名
  • port:サーバのポート(プロトコルデフォルトポートの場合、80 or 443)
  • path:リソースへのアクセスパス
  • query-string:パラメータ、httpサーバに送信されるデータ
  • anchor:アンカー(Webページの指定したアンカー位置にジャンプ)
  • http://localhost:4000/file/part01/1.2.html
  • http://item.jd.com/11936238.html#product-detail
  • urlアドレスにアンカーポイントが含まれているかどうかは、応答に影響を及ぼさない
  • .

    爬虫類は1回のリクエストしか送信できません.ブラウザはデータがすべてではないことを発見してajaxを通じて何度もリクエストします.
    爬虫類はjsの中の内容を持っていません
    getとpostの違い:
  • は直感的に意味的な違いであり、getはデータを取得するために使用され、postはデータをコミットするために使用される.
  • getパラメータには長さ制限(urlの長さに制限され、具体的な数値はブラウザとサーバの制限に依存する)があり、postには
  • が制限されていない.
  • GET要求、要求したデータはURLの後で添付して、以?URLと転送データを分割し、複数のパラメータを&接続し、POSTリクエストはリクエストしたデータをHTTPリクエスト体に配置します.
  • 詳細はpostリクエストとgetリクエストの違い
  • を参照してください.
    ストリングコーディング
    python 3デフォルト符号化方式utf-8
  • str->bytes encode()符号化、デフォルトはutf-8
  • bytes->str decode()復号、デフォルトはutf-8
  • requests
    resp = request.get(url)
    
    resp.content   # bytes   ,      
    
    resp.text   #              ,            
    resp.encodeing = 'utf-8'  #           
    

    ブラウザ–httpsプロトコル--Webサイト
    爬虫類–httpプロトコル-Webサイト
    要求ヘッダ:
  • User-Agent:サーバに、アクセス者のID
  • を伝える.
  • cookies:セッションを保持
  • Referr:ページジャンプ
  • jsonフォーマットをpythonタイプに変換し、python辞書に変換しません.
    エージェント
    ユーザはサーバipがプロキシVPNクライアントにプロキシされていることを知っている.
    ユーザはサーバipが逆エージェントであることを知らないNginxサーバがエージェントされる
    postリクエストの送信
    data = {"      formdata      "}
    requests.post(url, data=data)
    
    

    プロキシの使用
    ウェブサイトはipアクセスの頻度によって爬虫類かどうかを判断することができて、アクセスが速すぎると遮断されます
    エージェントを使用可能
    proxies = {“  ”: “   + ip +   ”}
    requests.get(url, proxies=proxies)
    

    エージェント
    Nginx
    UWSGI uWSGI
    u大文字はプロトコル、小文字はサーバ
    Googleが提供する3つの論文の1つ:
    コンシステンシハッシュによる負荷等化
    cookie
    クッキーの設定時にdomain=.baidu.com
    Sessionクラスはクッキーを保持するために使用されます
    エージェント
  • 透明エージェント(Transparent Proxy):透明エージェントはあなたのIPアドレスを直接「隠す」ことができますが、HTTP_X_FORWARDED_FORはあなたが誰なのか調べに来ました.
  • 匿名エージェント(Anonymous Proxy):エージェントを使用していることは知られていますが、実際のIP
  • はわかりません.
  • 混同エージェント(Distorting Proxies):他の人はあなたがエージェントを使っていることを知っていますが、偽のIPアドレスが得られ、よりリアルに偽装されています.
  • 高匿エージェント(Elite proxyまたはHigh Anonymity Proxy):他の人はあなたがエージェント
  • を使っていることを発見できません.
    クッキーとセッション
  • cookieにはサイズの制限があり、cookieは単一サイトで最大20個保存され、sessionには制限がなく、サーバーのハードディスクがどれだけ大きいかで保存できます.
  • cookieはクライアントが存在し、安全ではなく、sessionはサーバが存在し、安全
  • はいずれもセッション保持
  • として使用する.
    Flaskオリジナルのセッションはクライアントが存在し、そのセッションはクッキーに依存する.
    base 64で暗号化するだけで、可逆的です.
    requestsのSessionクラス
    このクラスを使用するとログイン状態を維持でき、リクエストするたびにクッキーを持参し、爬虫類をブラウザのようにすることができます.
    requestsはクッキーを携帯してログインします
  • cookie文字列headersに
  • 配置
  • クッキー辞書をrequestsリクエストメソッドのクッキー
  • に渡す
    headersのクッキーを優先的に使用
    見つからないとパラメータのクッキーを使う
    Preserve log:コンソールボタン、継続ログ
    <>括弧で囲まれたオブジェクト
    ログインインタフェースの探し方
  • formフォームaction対応urlアドレス
  • ユーザー名とパスワードのinputラベルでは、nameの値をキー、ユーザー名とパスワードを値の辞書としてpost data
  • とする.
  • パケットをキャプチャすることによってurlアドレスを位置決めする
  • form data


  • jsを分析し、暗号化されたデータを取得する
  • 変化を観察
  • 位置決めjs
  • event listenerによってjsの位置
  • を位置決めする
  • urlアドレスのキーワードを検索することにより、chromeのsearch all fileにより
  • を検索する.
  • 分析
  • ブレークポイントを追加することによってjs
  • を解析する.
  • 実行js
  • pythonシミュレーションjsを完全に使用する実行プロセス

  • requests ssl証明書の処理
    requests.get(url,verify=False)
    

    応答中のクッキーを取得し、辞書に変換
    response = requests.get(url,headers=headers)
    requests.utils.dict_from_cookiejar(response.cookies)
    

    タイムアウトパラメータの使用
    requests.get(url, timeout=3)
    

    retryingモジュールの使用
  • from retrying import retry
  • 装飾器を用いるretryを用いて異常捕獲を行い、装飾された関数
  • を再実行する.
    データの分類
  • 構造化データ
  • json,xml
  • モジュールを直接使用してpythonタイプ
  • に変換
  • 非構造化データ
  • html
  • re,xpath


  • jsonモジュールの使用
    json.loads:json文字列をpythonタイプに変換
    json.dumps:pythonタイプをjson文字列に変換
    json.load:json文字列を含むクラスファイルオブジェクトをpythonタイプに変換
    json.dump:p需要を:蘇寧易購入のすべての図書と図書の分類情報を取得する