Ajaxのクロール戦闘ストリートシュート水戸の見出し

より転載:静的模索  >>  [A Pythonの3 Webクローラー開発戦闘] Ajaxは今日の見出しをクロールの6.4分析は、ストリート水戸を打ちます

 

 

 いくつかの重要な分野における上記の記事、記録:

  • スキルクラス

  ウェブを確認した後、チェック--networkを選択し、我々はすべての情報の要求をクリアし、ページを更新し、この要求の最初のページには、今回のバックボーン、これで基本的なコードですが、データはAjaxの要求であってもよいですJSに行くレンダリングする際に、今回我々は結果が存在する場合、我々は直接ページを要求し、全体を検索するために、ネットワークのレスポンスボディ[プレビュー]タブで複製見たいというページ上のデータは、あなたが得ることができるようにしたいですない場合の情報は、データが最初にすべての検索モードのは、XHR、リフレッシュ要求に切り替えられ、我々はリンク要求データを分析する必要がレンダリングモードを、ロードし、要求によるもので、傍受は、Ajaxにここにあります要求は、それはデータが存在するなど、要求モードを解析する場所を確認する必要があるかどうか、データがJSONを取得することができます。

  通りの撮影のニーズは、AJAX要求の分析、そこリクエストヘッダの暗号化の何かが、あなたは次のセクションでは、独自のコードを書いていないので、亀裂のソースコードJS一部を読むことをお勧めします

  • コードクラス
    • 処理、建設フォルダ、画像のファイル名を選択
      1  インポートOS
       2  #1 hashlib - MD5の効果は、画像への1つの名前、2枚の画像を撮影することができ繰り返し
      3。 から hashlib インポートMD5
       4。 
      5。 
      6。 DEFのsave_image(項目):
       7。      ビルドイメージを格納するためのフォルダ
      8。     IF  ません os.path.exists(item.get(' タイトル' )):
       。9          os.mkdir(item.get(' タイトル' ))
       10      試み11          レスポンス= requests.get(item.get(' 画像' ))
       12のIS          もし== 200はresponse.status_codeある13である             画像構成されたストレージ・パス
      14              FILE_PATH = '。{0} / {{2}} 1 ' .format(item.get(' タイトル')、MD5(response.content).hexdigest ()、' JPG ' 15              IF  ないのos.path.exists(FILE_PATHは):
       16                  #のコンテンツは、それが直接ファイルWBにバイナリ書き込むことができますされて戻ってデータを要求した
      。17                  オープン(FILE_PATH、と' WB ' )AS F :
       18は、                     f.write(response.content)
       19。             20です                 印刷' 既にダウンロード' 、FILE_PATH)
       21      を除くrequests.ConnectionError:
       22          プリント' イメージの保存に失敗しました。'
    • マルチプロセス・プールを用いた処理
      1  から multiprocessing.pool インポートプール
       2  
      3。 
      4。 DEF メイン(オフセット):
       5      JSON = get_page(オフセット)
       6。     ための項目get_images(JSON)
       。7          プリント(項目)
       。8          save_image(項目)
       9  
      10  我々が試して固定された変数パラメトリックプログラミングのためのストレージを使用して変数大文字
      。11。GROUP_START 1 =
       12である GROUP_END = 20である
       13である 
      14  IF  __name__ == ' __main__ ' 15      オープンスレッドプール
      16     =プールプール()
       。17      グループ=(X * 20であるため X における範囲(GROUP_START、GROUP_END + 1 )])
       18である 
      。19      #のプールは、最も重要なマップ方式で、データを処理リストにマップされている
      20      pool.map (メイン、グループ)
       21である     pool.close()
       22である      )(pool.join

おすすめ

転載: www.cnblogs.com/waws1314/p/12502404.html