いわゆるウェブクローリングは、URLがアドレス指定されたネットワークリソースをローカルに保存するためにネットワークストリームアウトから読み込まれています。Pythonで、ウェブをクロールするために使用することができ、多くのライブラリがありますurllib2库基本使用
。
urllib2のがPython2.7搬送モジュールされていない(無ダウンロード、インポートするために使用することができます)
urllib2の公式文書:https://docs.python.org/2/library/urllib2.html
urllib2の出典:https://hg.python.org/cpython/file/2.7/Lib/urllib2.py
urllib2
これはpython3.xに変更されましたurllib.request
urlopen
#コーディング= UTF-8 #インポートurllib2のライブラリ をインポートurllib2の #リクエストURLを送信するには、ファイルのようなオブジェクトを返すサーバの応答、指定された レスポンス= urllib2.urlopen(「http://www.cnblogs.com/loaderman/ 」) #クラスのオブジェクトは、次のようなファイルオブジェクトファイルの操作方法をサポートread()メソッドは、ファイルと戻り、文字列の内容全体読み取る HTML = response.readを() #印刷の文字列 を印刷 HTML
書き込みPythonコードは、結果を印刷します
実際には、「ソースの表示」を選択し、右のWebページを閲覧するには、見つけるとまったく同じ出力します。言い換えれば、上記のコードの4行は、私たちがページを降り、すべてのコードを支援してきました。
要求に対応する基本的なURLのPythonコードは実際にはかなり簡単です。
要求
urlopen()パラメータは、URLアドレスです。
あなたは、このようなHTTPヘッダーを追加するなど、より複雑な操作を実行する必要がある場合しかし、あなたはurlopen()のパラメータとしてRequestのインスタンスを作成する必要があります。と、URLアドレスは、Requestのインスタンスとして必要なパラメータにアクセスします。
#コーディング= UTF-8 輸入urllib2の #パラメータ要求()メソッドのようなURLは、要求オブジェクトを返し、構築 要求=はurllib2.Requestを(「http://www.cnblogs.com/loaderman/ 」) #パラメータとして要求オブジェクトurlopen()メソッドは、サーバに送信し、応答受信 レスポンス= urllib2.urlopen(要求) HTML = response.read() 印刷 HTML
オペレーティング結果はまったく同じです。
新しいRequestインスタンス、外に加えて、URLのパラメータである必要があり、二つの追加のパラメータが提供されてもよいです。
データは、(空のデフォルト):「POST」メソッドにモードを「GET」からのHTTPリクエストながら、URLの提出(例えば、データをポストするために)データを伴っています。
ヘッダは(空のデフォルト):に送信するキーHTTPヘッダを含む辞書です。
これらの2つのパラメータは、我々は、以下について説明します。
ユーザーエージェント
しかし、このような直接使用するurllib2のは、Webサイトにリクエストを送信し、突然の少しを行う、のような、人々はすべてのドアを持っている、あなたは通行人の身元を直接明らかではない非常に丁寧で破りました。そして、いくつかのサイトが(非ヒトアクセス)プログラムされて好きではないがあるアクセス、アクセスのためのあなたの要求が拒否することができます。
我々は、サイトへのリクエストの人々への法的地位を使用している場合、我々はアイデンティティと、この私たちのコードを与える必要がありますので、しかし、どうやら人々は、と呼ばれ、歓迎されているUser-Agent
ヘッド。
- ブラウザは、私たちが実際のユーザーのようなGoogleのクローラをしたい場合は、インターネットの世界のアイデンティティを許可されているものとして認識され、そして我々があることを最初のステップは、認識され、ブラウザに変装する必要があります。異なるブラウザは異なるUser-Agentヘッダを持って、一度にリクエストを送信します。urllib2のデフォルトのUser-Agentヘッダがある:
Python-urllib/x.y
(XおよびYはPythonのメジャーおよびマイナーバージョン番号、例えばPythonの-urllibは/ 2.7です)
#コーディング= UTF-8 輸入urllib2の URL = " http://www.cnblogs.com/loaderman/ " #9.0のUser-AgentののIEは、ua_headerの中に含まれていた ua_header = { " User--エージェント":" はMozilla / 5.0(互換; MSIE 9.0; Windows NTの6.1;トライデント/ 5.0; " } # URLと共にヘッダを持つ、リクエスト要求で構成され、要求は、ユーザエージェントIE9.0ブラウザ含ま リクエスト=はurllib2.Requestを(URL、ヘッダー= ua_header) #サーバーにリクエストを送信し レスポンス= urllib2.urlopen(リクエスト) HTML = response.read() 印刷 HTML
より多くの情報ヘッダを追加します。
完全なHTTPリクエストメッセージを構成するために、中に特定のHTTPリクエスト・ヘッダーを追加します。
呼び出すことにより、
Request.add_header()
アド/あなたも呼び出すことができ、特定のヘッダ変更Request.get_header()
既存のヘッダーを見ることを。
- 特定のヘッダを追加
#urllib2_headers.py 輸入urllib2の URL = " http://www.cnblogs.com/loaderman/ " #IE 9.0的のUser-Agent ヘッダ= { " ユーザエージェント":" はMozilla / 5.0(互換; MSIE 9.0; Windows NTの6.1;トライデント/ 5.0; " } リクエスト =はurllib2.Request(URL、ヘッダー= ヘッダ) #また、呼び出すことによって追加することができますRequest.add_header()/特定のヘッダの変更 request.add_headerを(「接続」、「キープアライブ」) #あなたはRequest.get_header()を呼び出すことで、ヘッダー情報をも見ることができます #のrequest.get_header(HEADER_NAMEは、 "接続" =) レスポンス = urllib2.urlopen(REQ) 印刷 response.codeの #は、応答ステータスコードを表示することができます HTML = response.read() 印刷 HTML
- ランダムの追加/変更がユーザーエージェント
#urllib2_add_headers.py 輸入urllib2の 輸入ランダム URL = " 時間TTP://www.cnblogs.com/loaderman/ " ua_list = [ " のMozilla / 5.0(Windows NTの6.1;)アップル.... " 、 " Mozillaの/ 5.0(X11; CROS i686の2268.111.0)... " 、 " Mozillaの/ 5.0(Macintosh版; U; PPC Mac OSのX .... " " Mozillaの/ 5.0(Macintosh版、インテルのMac OS ... " ] user_agentの = random.choice(ua_list) 要求 = はurllib2.Request(URL) #またRequest.add_header()を呼び出すことによって、特定のヘッダーを変更/追加することができます request.add_header(「ユーザエージェント」、user_agentのを) #背後にあるすべての小文字、大文字の最初の文字 request.get_header(「ユーザーエージェント」) 応答 = urllib2.urlopen(REQ) HTML = response.read() 印刷 HTML