### 2.requestsモジュール - コンセプト:役割は、要求のネットワークモジュールに基づいて要求を開始し、ブラウザをシミュレートするために使用される。 - エンコーディングプロセス: - 指定URL - リクエストを送信する - (クローリングにデータ)応答データをフェッチ - 永続ストレージ - インストール環境: - PIPは、インストールを要求 **リクエスト:** - GET / POSTを: - URL -データ/ のparams:パッケージのリクエストパラメータ - ヘッダ:UAの迷彩は - 動的によってロードされるどのようなデータ:追加のデータを要求する別の要求 - アヤックス - JS - ?動的にページをロードするデータがあるかどうかを識別するための方法 - ローカル検索 - グローバル検索 -行うには、クロールの前に奇妙なウェブサイトへの第一歩? - あなたはクロールデータにしたいかどうかを判断し、動的にロードされます!!! #### 2.1中国のゴミ問題 `` `Pythonの #は中国を解決するには、文字化け WD =入力を(' 鍵Aを入力してください' ) URL = ' https://www.sogou.com/web ' #保存されたパラメータの動的要求である のparams = { ' クエリ' :WD } #は必ずしも要求のparamsに適用することが #paramsは、パラメータは、パッケージ要求のURLパラメータを示し 応答= requests.get(URL = URL、paramsは= paramsは) #は、手動で応答データを変更する符号化!!!!!!!!! response.encoding = ' UTF-を8 ' page_text= Response.text fileNameに = WD + ' .htmlを' オープン(ファイル名、との' W '、=エンコード' UTF-8。' )AS FP: fp.write(page_text) 印刷(WD、' !成功のダウンロード' ) ` ####抗登る2.2 UAとUA迷彩メカニズム `` `Pythonの #の問題:ほとんどのサイトは、検証を要求します、いないブラウザが要求を開始する場合、サーバはアクセス拒否されます #中国を解決するために文字化け&UA迷彩 WD = INPUT(「キーAを入力してください。」) URL = 「https://www.sogou.com/web 」 #保存され、要求の動的パラメータであります paramsは= { ' クエリ' :WD } #は程度では、ヘッダ情報に対応する要求を開始する ヘッダー= { ' User--エージェント':' (; Win64の、Windows NTの10.0 x64-)のMozilla / 5.0のAppleWebKit / 537.36(KHTML、ヤモリ等)クローム/サファリ76.0.3809.100 / 537.36 ' } #必ずしも要求に適用することがparamsは #のparamsパラメータパッケージを示す要求にあるURLパラメータ #ヘッダパラメータを隠すために使用されるUAの達成 応答= requests.get(URL = URL、 paramsは= paramsは、ヘッダー= ヘッダ) #手動でエンコードされたレスポンスデータ修正 = response.encoding 「UTF-を8 」 page_text = response.text fileNameに+ WD = ' .htmlを' オープン(ファイル名、との' W '、=エンコード' UTF-8。' )AS FP: fp.write(page_text) 印刷(WD、' ダウンロード成功!' ) ` #### 2.3ダイナミックローディングデータ 動的にページをロードするデータがあるかどうかを確認するにはどのように? - ローカル検索のためのキャプチャツール - ?動的データを検索するためにデータをロードする方法についてのページと判断された場合 - グローバル検索の使用パケットキャプチャツール - なじみのないサイトデータには、クロールクロールする前に判断する必要がありますデータが動的にロードされているかどうか!!! `` `Pythonの #の例のニーズは 、企業の詳細情報をクロールします。http://125.35.6.84:81 / XK / 分析: 1 。データサイトのホームとビジネスの詳細ページです動的負荷アウト 2。?データのビジネス企業の詳細の分析はどのように来ている のAjaxリクエスト(ポスト)を介して、企業データの詳細へのお願い。 リクエストURLに対応する:HTTP: //125.35.6.84:81/xk/itownet/portalAction ?.doという方法、= getXkzsById ID:要求パラメータを搬送xxdxxxx 結論: 1 。各企業のデータの詳細ページは、要求にポストAJAXリクエストフォームからなる 2 URL AJAXリクエストを対応する各企業。同じですが、やり方要求はポストは、唯一のidパラメータの値が同じ要求ではないです。 3 のみ対応する詳細データを得るために、各企業に対応する各会社のid値を取得する必要があります。 必要性は各企業ののid値を取得するため のアイデアを:各会社のid値は、対応するホーム関連の要求または応答に格納されなければならない。 結論:各会社のid値が応答データ、企業内だけ応答データに対応する一つのAJAXリクエストのホームに格納されていますIDエキス / 直後に出て解析します。 `` ` ` `` Pythonの #のコードを達成するために #を該当するIDに会社を要求しないように URLを= " http://125.35.6.84:81/xk/itownet/portalAction.do ?方法= getXkzsList'、 データ = { ' に':' 真' 、 ' ページ':' 1 ' 、 ' のpageSize ':' 15 ' 、 ' 商品名':'' 、 ' ConditionTypeを':' 1 ' 、 ' applyname ':'' 、 ' applysn ":'' } FP(=オープン' ./company_detail.txt '、' W ' =エンコード、' UTF-を。8 ' ) #JSON()各企業IDの値が持つ返し data_dic = requests.post(URL = URL、をデータ=データ、ヘッダ= ヘッダ).json() #解析ID のために DIC に data_dic [ ' 一覧' ]: _id = DIC [ ' ID ' ] #の 印刷(_id) #データ・キャプチャに対応する業務IDの詳細について(開始要求) POST_URL = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById ' post_data = { ' ID ' :_id } #1 JSONの戻り値は、情報ビジネスリスティングの一つである detail_dic = requests.post(URLをPOST_URL =、=データpost_data、ヘッダ= ヘッダ).json() COMPANY_TITLE = detail_dic [ ' epsName ' ] アドレス = detail_dic [ ' epsProductAddress ' ] fp.write(COMPANY_TITLE + ' :' +アドレス+ ' \ N- ' ) を印刷(COMPANY_TITLE、' 成功をクロール!!! ') fp.close() `` `