爬虫類基礎|| 1.3ハンドラ援助(検証、プロキシ、クッキー)

我々は、要求を構築することができますが、しかし、(などの処理クッキー、プロキシの設定、など)より高度な操作の一部、のために我々はそれをどのように行うことができますか?

次に、我々はより強力なツールにハンドラを必要としています。

要するに、我々はログイン認証に対処する必要が、プロセッサの様々なとしてそれを理解することができ、処理のクッキーがあり、処理のプロキシ設定があります。それらを使って、我々は、HTTPリクエストのほぼすべてを行うことができます。

まず第一に、このようdefault_openとして最も基本的な方法を提供し、他のすべてのHandlerクラスの親であるたBaseHandlerクラスでurllib.requestモジュール、を教えて()、protocol_request()など。

次のように次は、種々のハンドラたBaseHandlerサブクラス継承は、例えば、クラスがあります。

HITPDefaultErrorHandler:HTTPレスポンスのエラーを処理するため、エラーは例外HTTPError種類をスローされます。
HTTPRedirectHandler:リダイレクションプロセスのために。
HTTPCookieProcessor:クッキーを処理するため。
proxyHandler:プロキシデフォルトのプロキシが空で設定するために使用。
HTTPPasswordMgr:ユーザー名とパスワードのリストを保持パスワードを管理します。
HTTPBasicAuthHandler :管理認証のため、認証はリンクが開かれている場合、あなたは認証の問題を解決するためにそれを使用できる必要があります。

また、ここではそれらを表示しない、他のハンドラ・クラスがあり、その詳細は、公式ドキュメントを参照することができます:http // docs.python.org / 3 /ライブラリ/ urllib.request.html#urllib.request.BaseHandler。

もう一つの重要なカテゴリーではOpenerDirectorあり、我々はオープナー呼び出すことができます。

私たちはurllibはオープナーを提供するためurlopen()このメソッドの前に使用され、実際にはそれがあります。

なぜオープナーが行う紹介?より高度な機能の必要性のため。あなたは良いパッケージは非常に一般的なリクエストメソッドのライブラリに相当します)(リクエストとurlopenを使用する前に、私たちは基本的な要求を完了するためにそれらを使用することができますが、同じではありませんが、今、私たちはより高度な機能を実装する必要がある、あなたは、深さの層を必要とします構成、操作を完了するために下位レイヤを使用して実施例ので、ここでオープナーを使用します。

オープナーを開くことができる()メソッドの戻り型とurlopen()がまったく同じです。まあ、それは、とオープナーを構築するためのハンドラハンドラの使用との関係。

確認してください1.

あなたはボックスを開くと、認証が成功した後(このサイトは非常に小さくなっているが)いくつかのサイトには、ページを表示するためのユーザー名とパスワードを入力するよう求められ、直接、プロンプトポップアップ表示されます

from urllib.request import HTTPPasswordMgrWithDefaultRealm,HTTPBasicAuthHandler,build_opener
from urllib.error import URLError 

username = 'username'
password ='password'
url =  'http: //localhost:5000/'
p = HTTPPasswordMgrWithDefaultRealm() 
p.add_password(None, url, username, password)
auth_handler = HTTPBasicAuthHandler(p)
opener = build_opener(auth_handler) 
try: 
    result = opener.open(url) 
    html = result.read().decode('utf-8') 
    print(html) 
except URLError as e: 
    print(e.reason) 

通訳コード:

結果は、与えられたいかなるホース] [しない
、したがって、プロセスの検証ハンドラを確立し、そこにユーザ名とパスワードを追加add_password()を使用してこのオブジェクトはHTTPBasicAuthHandlerオブジェクトパラメータがであるHTTPPasswordMgrWithDefaultRealmインスタンス化されている1、。
ハンドラを使用して2.次に、 -送信要求に応じて抜き、オープナーを構築するbuild_opener()メソッドがすでに正常に検証することと等価です。
3.次に、リンクを開くには、オープンオープナーの()メソッドは、あなたが検証を完了することができます。ここで取得するソースのコンテンツページの後の結果を確認することです。

2.エージェント 

爬虫類の時間を行うには、あなたは必然的にエージェントを追加する場合、あなたはハンドラを使用することができ、プロキシを使用する必要があります。

from urllib.error import URLError 
from urllib.request import ProxyHandler,build_opener 
proxy_handler = ProxyHandler({ 'http':'http://127.0.0.1:9743',
                               'https':'https://127.0.0.1:9743 '}) 
opener = build_opener(proxy_handler) 
try: 
    response = opener.open('https://www.baidu.com') 
    print(response.read() .decode('utf-8'))
except URLError as e: 
    print(e.reason) 

西に行くことができる2つの薬剤、学生の独自のエージェント・プールを持っていないことについてproxy_handlerはフリーエージェントを見つけるために、プロキシサイトを果たしている、もちろん、たくさんのみ使用することを学んで、使用することはできませんし、ここにシミュレートされています。彼らは、プロキシを設定し、それポート9743上で実行されています。これはにproxyHandlerを使用して、辞書のキー名は、(HTTPやHTTPSなど)プロトコルタイプである引数は、キーリンクはエージェントです、あなたはより多くのエージェントを追加することができます。次に、これとと - に要求を送信した後、オープナーを構築するbuild_openerハンドラ()メソッド。

3.Cookies

クッキーは、最初にすべての、私たちはをCookieJarオブジェクトを宣言する必要があり、爬虫類は非常に一般的な手段、レッツ・ダイレクトハンドラキャリークッキーを運びます。次は、使用HTTPCookieProcessorハンドラを構築する必要があり、最終的に - build_openerは、オープナー()メソッドを使用して構築open()関数を実行することができます。

import http.cookiejar,urllib.request 
cookie = http.cookiejar.CookieJar()
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler) 
response = opener.open('http://www.baidu.com') 
for item in cookie: 
    print(item.name+'='+item.value) 

さて、私たちは店のテキストにクッキーを入れて、今、クッキーの出力を見てきました。

filename = 'cookies.txt' 
cookie = http.cookiejar.MozillaCookieJar(filename) 
handler = urllib.request.HTTPCookieProcessor(cookie) 
opener = urllib.request.build_opener(handler) 
response = opener.open('http://www.baidu.com') 
cookie.save(ignore_discard=True, ignore_expires=True) 

その後のCookieJar必要性がMozillaCookieJarを交換する、のCookieJarサブクラスクッキーなどの読み取りなどとクッキーの保存ファイルに関連付けられたハンドルイベントに使用することができますされたファイルを生成する際に、クッキーはMozillaブラウザの種類に保存することができます使用されますクッキーフォーマッタ。

また、LWPCookieJarクッキーも読んで保存されたが、形式と同じではありませんMozillaCookieJar保存、それはのlibwww-perlの(LWP)クッキーファイル形式として保存されますすることができます。クッキーは、LWP形式として保存されます、それは文の時に変更することができます。

filename = 'cookies.txt' 
cookie = http.cookiejar.LWPCookieJar(filename)  ## 这里的声明改变
handler = urllib.request.HTTPCookieProcessor(cookie) 
opener = urllib.request.build_opener(handler) 
response = opener.open('http://www.baidu.com') 
cookie.save(ignore_discard=True, ignore_expires=True) 

クッキーの二種類がかなり異なるフォーマットであり、今はLWPCookieJar形式を見て、たとえば、ファイルからクッキーをお読みください。

cookie = http.cookiejar.LWPCookieJar() 
cookie.load('cookies.txt', ignore_discard=True, ignore_expires=True) 
handler = urllib.request.HTTPCookieProcessor(cookie) 
opener = urllib.request.build_opener(handler) 
response= opener.open('http://www.baidu.com')
print(response.read().decode('utf-8')) 

ローカルファイルのクッキー、クッキーのコンテンツへのアクセスを読み取るためにload()メソッドを呼び出して、ここで見ることができます。

しかし、我々は最初のクッキーLWPCookieJar形式を生成し、ファイルに保存し、その後ハンドラlOpenerを構築する場合にのみクッキーを読んだ後、操作を完了するために、同じ方法を使用します。通常の操作の結果であれば、Baiduの意志出力ページのソースコード。上記の方法を通じて、我々はセットがリクエストの大半を備えて達成することができます。異なるフォーマットで記憶2種類の方法は、最終的な効果は同じで使用することです。


本論文では、参照「のpython3は、実際のWebクローラを開発」 - 清のみCUIを

公開された17元の記事 ウォン称賛12 ビュー10000 +

おすすめ

転載: blog.csdn.net/Watson_Ashin/article/details/104295153
おすすめ