urllibはノート

パイソン3においては、urllib.requestとurllib.error呼ばurllibはurllib2の中に組み込まれました。
モジュール全体urllibはurllib.request、urllib.parse、urllib.errorに分割されています。

HTTPリクエストメソッド:
標準のHTTP、HTTPリクエストには、いくつかのリクエストメソッドを使用することができます。
GET、POST、およびHEADメソッド:HTTP1.0の要求は、3つのメソッドを定義します。
HTTP1.1 6つの新しい要求方法:OPTIONS、PUT、PATCH、DELETE 、TRACE 、およびCONNECTメソッド。

1つのGET要求ページ情報が指定され、エンティティボディを返します。(サーバからの取得要求)
2は、ヘッドGETリクエストと同様であるが、応答は特定のコンテンツに返されていない、ヘッダ取得するための
3 POSTを指定されたリソース(例えば、ファイル送信フォームまたはアップロード)にデータ処理要求を送信します。データは、リクエストボディに含まれています。POSTリクエストは、新しいリソースにリソースを確立および/または既存の改正をもたらすことができます。(サーバにデータを送信する)
。4個の置換基は、クライアントからサーバデータ伝送にドキュメントのPUTコンテンツに指定。
サーバーへの5 DELETE要求は、指定されたページを削除します。
6 CONNECT HTTP / 1.1プロトコルは、プロキシサーバのパイプラインモードへの接続のために予約することができます。
7つのオプションは、クライアントがサーバーのパフォーマンスを表示することができます。
8 TRACEエコーサーバ要求は、主にテストまたは診断のために使用される、受信されました。
9 PATCH相補PUT方法が知られているローカルリソースを更新するために使用されます。

詳細URL:
URI:ユニフォームリソース識別子(ユニフォームリソース識別子)、送信データに使用される接続を確立します。
。URL:ユニフォーム・リソース・ロケータ(ユニフォームリソースロケータ)
プロトコル://ホスト名URLの一般的な形式は、(角括弧[]内のオプションである)である:[ [?クエリ] [パラメータ]ポート] /パス/# 断片
1、スキーム(プロトコル):指定のトランスポートプロトコルが使用されるが、最も一般的には、現在最も広く使用されているWWW契約であるHTTPプロトコルです。
ファイルリソースは、ローカルコンピュータ上のファイルです。フォーマットファイル://
アクセスリソースへのFTP経由でFTP。FTPをフォーマット://
GopherのはGopherプロトコルを使用して、リソースにアクセスします。
HTTP HTTP経由でリソースにアクセスします。//:フォーマットHTTP
セキュアなHTTPSを使用して、リソースにアクセスするためのHTTPS。フォーマット= _blankターゲット> HTTPS://

2、ホスト(ホスト名、ドメイン名):ドメインネームシステムサーバ・ストレージ・リソース(DNS)ホスト名またはIPアドレスを指します。
図3に示すように、ポート(ポート番号):整数、オプション、デフォルトブラウザ80のポート
4、経路(パス):「/」記号列によってゼロまたはそれ以上のホスト上のディレクトリを示すために使用される一般的に、間隔を空けまたはファイルアドレス
5は、パラメータ(パラメータ):このパラメータは、特別なオプションを指定するために使用されます。
図6に示すように、クエリ文字列(クエリ文字列)あるいは、動的ウェブページ(例えば、農産物CGIに技術を使用して、ISAPI、PHP / JSP /ための ASP / ASP.NETのパラメータを渡すために、ページ、等)、複数のパラメータが存在してもよいです、 「&」記号が離間して、「=」記号によって名と各パラメータの値は、間隔をあけ。
背景は、一般ページナビゲーションのために使用さ先端制御しない:7、アンカー(アンカー)

要求ヘッダ共通パラメータ:

httpプロトコルを、サーバに要求を送信し、データを3つのに分割され、最初のものは、データを置くことですURL、第二本体は、第3のデータをヘッドに教示されている、(POSTリクエストで)データに配置され、その数はしばしば、いくつかのリクエストヘッダ寝台本明細書で使用されるクローラに記載:
1 。のUser-Agent:ブラウザ名。
これは、多くの場合、ネットにクロールに使用されています。Webページを要求し、このパラメータを介して、サーバは、要求が劉のブラウザによって送信されたかを知ることができます。私たちはワームによって要求を送信し、その後、私たちのUser-Agentは、これらのサイトのためのアンチワームのメカニズムを構築しているpyton、ある場合には、生産が簡単にあなたの要求の爬虫類を破ることができます。したがって、我々は常に我々のクローラを偽装するために、いくつかのブラウザの値にこの値を設定する必要があります。
2.リファラー:現在のURLが、そこからの要求が終わったこと。また、これは、一般的な抗クローラ技術のために使用することができます。それは指定されたページから来ていない場合は、関連する応答を行いません。
3.Cookie:HTTPプロトコルはステートレスです。それは、二回のリクエストを送信するために同じ人で、サーバは、同じ個体からこれら2下さいソングかどうかを知ることができるではありません。だから、今回はモデルがクッキーを識別します。一般的な駅あなたがアクセスし、ログインした後に行いたい場合は、クッキー情報を送信する必要性を教えます。

HTTPステータスコード(HTTPステータスコード)WebサーバのHTTP応答の状態を表す3桁のコードです。
これは、定義されたRFC 2616で構成され、RFC 2518、RFC 2817、RFC 2295で 、RFC 2774、RFC 4918 の仕様は次のように延びています。
メッセージの1xx
の2xx成功
の3xxリダイレクト
4xxのリクエストエラー
5xxの6xxのサーバーエラー
(一般的なステータスコード:200,301,302,400,403,500)
HTTPステータスコードと1つの始まり
ステータスコードは暫定的な応答を示し、の操作を続行するには、リクエスタが必要です。

100(続き)リクエスタは、要求を継続する必要があります。サーバーは、このコードは、要求の最初の部分が受信されたことを示し、残りを待って返します。
101(プロトコル切り替え)リクエスタプロトコルを切り替えたサーバは、ハンドオーバを承認され、サーバを必要とします。

2 HTTPステータスコードで始まること
に成功し、要求を示している

200は、要求を正常に処理さを、通常の状況下では、このステータスコードが返され、
201が正常にサーバーを要求し、新しいリソースを作成します。
202が、リソースを作成するための要求を受け入れなかった;
、別のリソースに203戻っ要求を
204サーバが正常に要求を処理し、任意のコンテンツを返さない、
205サーバが正常に要求を処理し、任意のコンテンツを返さない;
206要求処理部と、

3XX(重量指向)
リダイレクトコードが、それはまた、共通のコードであります

リクエスト300(選択)、サーバは、様々な動作を行うことができます。サーバは、に従って選択リクエスタ(ユーザエージェント)を操作する、または要求者が選択するためのアクションのリストを提供することができます。
301(恒久的なリダイレクト)恒久的に要求されたページは新しい場所に移動されました。サーバはこの応答(GETまたはHEAD要求に対する応答)を返し、それが自動的に転送し、リクエスタ新しい場所へ。
Webサーバからの要求に302(一時移動)応答は、現在、別の場所であるが、要求者は、将来の要求のために元の場所を引き続き使用する必要があります。
303サーバがこのコードを返し、別の場所にGET要求を分離すべきである応答を取得するためにリクエスタ(他の場所を参照)。
304最後の要求以来(変更不可)、要求されたページが変更されていません。サーバはこのレスポンスを返すと、そのページのコンテンツには戻りません。
305(使用プロキシ)要求者にのみ、プロキシを使用して、要求されたページにアクセスすることができます。サーバはこの応答を返した場合、それは、リクエスタエージェントを使用すると述べました。
307現在位置から別のWebページからの要求に(一時的なリダイレクト)サーバの応答が、要求者は、将来の要求のために元の場所を引き続き使用する必要があります。

HTTPステータスコードと4初めは、リクエストエラーを示す

400サーバーは、要求の構文を理解していません。
401リクエストには認証が必要です。ログインが必要なページの場合、サーバーは、この応答を返すことがあります。
サーバ403は、要求を拒否します。
404サーバーは、要求されたページを見つけることができません。
要求405で指定されたメソッドが無効になっています。
406は、ページを要求されたコンテンツ特性の要求に応じて使用することができません。
このステータスコード407は、要求がプロキシの使用を許可する必要があることを401に似ていますが、指定します。
要求408サーバーを待っている間にタイムアウトが発生しました。
サーバー409は、要求を完了する際に競合が発生します。サーバが応答した紛争についての情報を含める必要があります。
410要求されたリソースが恒久的に削除された場合、サーバはこの応答を返します。
サーバ411は、有効なContent-Lengthヘッダフィールドのない要求を受け付けません。
サーバ412は、要求における要求者のための前提条件ではない、請求満たされます。
サーバが処理するには大きすぎるため、413サーバーは要求を処理できません。
URIは(一般的に、URL)414要求が長すぎる、サーバが処理することはできません。
フォーマットの415個の要求は、サポートページを要求しません。
あなたは416ページ要求の範囲を提供することができない場合は、サーバーはこのステータスコードを返します。
サーバー417は、リクエストが必要ですが、「期待する」ヘッダフィールドを満たしていません。

5最初のステータスコードは一般的ではありませんが、私たちは知っている必要があり

、サーバーでエラーが発生し、要求を満たすことができません500(内部サーバーエラー)を。
501(実装されていません)サーバーは要求を完了する必要はありません。たとえば、サーバーがこのコード要求識別方法を返さない場合があります。
502(不正なゲートウェイ)ゲートウェイまたはプロキシサーバは、上流のサーバーから無効な応答を受け取りました。
(それが過負荷またはメンテナンスのためにダウンしているため)、503(サービス利用不可)サーバーは現在使用できません。通常、これは一時的な状態です。
ゲートウェイまたはプロキシサーバが、要求として504(ゲートウェイタイムアウト)上流のサーバから受信されていません。
505(HTTPバージョンがサポートされていない)サーバは、要求に使用されるHTTPプロトコルのバージョンをサポートしていません。


パケットキャプチャツール:
要素:からなる現在のWebページのソースコードとは何ですか
コンソール:のJSコード出力端子
出典:というファイルのページ
ネットワーク:ページ参照要求て送信が(ちなみに、要求されたコンテンツは、その要求を参照)


要求されたライブラリー:
(に内蔵された機能:Ctrlキー+ Ctrlキー+ Bまたはマウスの左ボタン)
urllibはライブラリー:(のpython3モジュールの集合体に組み込まれてurllib.request、インポートライブラリ関数:urllibはリクエストからのインポート)
urlopen機能:
(URL、データ=なし、socket._GLOBAL_DEFAULT_TIMEOUTタイムアウト=、*、=なしcafileがあるurlopen、capathで指さ=なし、= Falseのcadefault、コンテキスト=なし):
URL:URLは、要求され
たデータを:データ要求、この値は、その後のポストの要求をサポートするように設定されている場合
、タイムアウト:遅延
戻り値:値を返すhttp.client.HTTPResponseオブジェクトことオブジェクトへのハンドルです。
読み(サイズ)が指定されていないファイルのすべての内容読み
のreadline:時に行
readlines:データの読み込み複数行
のgetcode:ステータスコード
urlretrieve機能:
この方法は簡単に、ローカルにウェブページ上のファイルに保存することができます画像の保存など
parse_qs(QS) 印刷(結果)urlparseとurlsplit、1つの以上のparams urlparse、基本的に同じ。 urllibはインポートの解析から
















= URL 'http://www.imailtone.com/WebApplication1/WebForm1.aspx;hello?name=tom&;age=20#resume'
resault = parse.urlparse(URL)
を印刷( 'スキーム:'、resault.scheme)
印刷( 'netlocを:'、resault.netloc)
印刷( 'パス'、resault.path)
印刷( 'のparams:'、resault.params)
印刷( 'クエリ:'、resault.query)
印刷( '断片' 、resault.fragment)

request.Requestクラス:
あなたがリクエストヘッダの増加を要求したい場合は、そのような追加など、request.Requestクラスの使用を実装する必要がある-エージェントユーザー、
urllibはインポート要求から、パース
URL =「HTTPS:// www.lagou.com/jobs/list_python/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput= "
#RESP = request.urlopen(URL)
印刷(RESP。READ())
{ヘッダー=
' -エージェントユーザー': 'のMozilla / 5.0(Windows NTの10.0; Win64の、x64-)のAppleWebKit / 537.36(KHTML、ヤモリなど)クローム/ 73.0.3683.86サファリ/ 537.36'、
'リファラー':「HTTPS://www.lagou ?.COM /真&labelWordsに&fromSearch = falseにジョブ/ list_python / P-city_0&Clで= =&suginput = '}
データ= {
'最初の''真の'、
'PN ':' 1'、
' KD ':'のPython「}
REQ = request.Request(URL、ヘッダー=ヘッダ 、データ= parse.urlencode(データ).encode( 'UTF-8')、メソッド= 'POST')#の追加ユーザエージェント、リファラー、データ及びパラメータデータエンコーディング
= request.urlopen RESP(REQ)
プリント(resp.read()。デコード( 'UTF-8'))#は、復号

にproxyHandlerプロセッサ(IPプロキシ設定)
'http://www.httpbin.org/'部位を使用していくつかのパラメータを表示するために、HTTP要求
クッキーとは何か: クッキーは、時々 、クッキーの複数形を使用し、特定のWebサイトには、ID、追跡され、ユーザーのローカル端末に保存されたセッションを虐待(通常は暗号化された)データを参照します。RFC2109で定義されており、2965年には放棄されている、最新の仕様に置き換えRFC6265です。 名前:クッキーの名前を。 値:Cookieの値。 ドメイン:クッキーは、ドメイン名にアクセスすることができます。 有効期限:クッキーデッドタイムを、秒単位で、














パス:クッキーの使用のパス。
セキュア:クッキーは唯一のセキュリティプロトコル場合に使用されます。HTTPSとSSLセキュリティプロトコルは、ネットワークの暗号化を介したデータの最初の送信前にこのようなデータを持っています。デフォルトはfalseです。

実施例1:
urllibはインポート要求から
URL = 'http://www.renren.com/880151247/profile'
ヘッダー= {
'のUser-Agent':「のMozilla / 5.0(Windows NTの10.0; Win64の、x64-、RV:73.0) Gecko / 20100101 Firefoxの/ 73.0」、
'クッキー': 'wp_fold = 0; _r01_ = 1。anonymid = k6q3nelcabojoo。depovince = LN; taihe_bi_sdk_uid = 09ecf7537e2a34b628e281831b84b42d。jebe_key = 2c043046-81f7-4d1f-967b-311f5ced93f4%7Cd39a42f8e30da355ea6608fb51f73574%7C1581922246738%7C1%7C1581922246672。jebe_key = 2c043046-81f7-4d1f-967b-311f5ced93f4%7Cd39a42f8e30da355ea6608fb51f73574%7C1581922246738%7C1%7C1581922246674。jebecookies = c773ae43-1e0b-49e7-968f-09395211d019 |||||。JSESSIONID = abcfYtpckGeCT5Oaw-RBX。taihe_bi_sdk_session = a92b80af092a72dea469264ef24c32a1。ick_login = 42131da7-55ae-47c7-a142-740f0df95f89。トン= abc15a448e816609aad40fdb911941d27。societyguester = abc15a448e816609aad40fdb911941d27。ID = 973744147。xnsid = adfefda2。= 7.0版。loginfrom = NULL」、
}
REQ = request.Request(URL、ヘッダー=ヘッダ)
RESP = request.urlopen(REQ)
#を印刷(Resp.read()のデコード( 'UTF-8を。')。)
オープンして( 'dapeng.html'、 'W'、=エンコード'UTF-8')AS FP:
#writeを書き込む必要がありSTRをタイプデータ
#1 resp.read()データ型バイトから読み出され
>エンコード- - >バイト#str
#bytws - >デコード- > STR
。 'UTF-8' fp.write(resp.read()デコード( ))
例2:アカウントのパスワードを使用


:http.cookjarモジュール
をCookieJar(メモリに格納されている)、FileCookieJarの、MozillaCookieJar、LWPCookieJarを(ファイルに格納されています)。
CookieJar:管理HTTPクッキー値、クッキーによって生成された店舗のHTTPリクエスト、クッキーを追加するための発信HTTPリクエストオブジェクト。ガベージコレクションも失われます後に全体のクッキーは、インスタンスクッキーのCookieJarのために、メモリに格納されます。
FileCookieJarの(ファイル名、DELAYLOAD =なし、政策=なし)は: FileCookieJarのインスタンスを作成するためのCookieJar由来、およびクッキーファイルに保存されたCookie情報を取得します。ファイル名は、クッキーファイル名で保存されています。DELAYLOADは、ファイルに保存されたファイルやデータを読み取るために必要なときだけ、であるTrueにファイルアクセスのレイテンシのアクセスをサポートしています。
MozillaCookieJar(ファイル名、DELAYLOAD =なし、ポリシー=なし): FileCookieJarの由来の、Mozillaブラウザと互換性のcookies.txt FileCookieJarのインスタンスを作成します。
LWPCookieJar(ファイル名、DELAYLOAD =なし、政策=なし): のlibwww-perlので、FileCookieJarの由来互換性が標準セットCookie3ファイル形式FileCookieJarのインスタンスを作成します。
実際には、ほとんどの場合、我々は唯一の相互作用は、ローカルのファイルが必要な場合は、をCookieJar()を使用して、MozillaCookjar()またはLWPCookieJar()を使用します。私たちはカスタマイズされたクッキーを持っている必要がある場合はもちろん、我々はHTTPCookieProcessプロセッサの助けを借りて対処する必要があります。下記の特定のコードを参照してください。

:ローカルに保存クッキー
urllibはインポート要求から
http.cookiejarインポートMozillaCookieJarから

のCookieJar = MozillaCookieJar( 'cookie1.txt')
cookiejar.load(ignore_discard = TRUE)#負荷クッキー情報コール
ハンドラ= request.HTTPCookieProcessor(をCookieJar)
オープナー= request.build_opener(ハンドラ)
Opener.open RESP =#( "http://www.baidu.com")
RESP = opener.open( "http://www.httpbin.org/cookies/set?count=spider")
#1 cookiejar.save( )cookijar名は、ファイル名、保存するには、再度記入するように設定されていない#場合は
期限切れクッキー情報保存#cookiejar.save(ignore_discard = TRUE)#の
をCookieJar内のクッキーのため:
印刷(クッキー)


















おすすめ

転載: www.cnblogs.com/baoshijie/p/12363965.html