スパイダーデータマイニング----- 2、urllibライブラリとurllib3ライブラリの理解

1. urllibライブラリ(組み込みの公式標準ライブラリ、組み込み)、python3は、第1世代と第2世代の
1、urllib.requestリクエストモジュール(クローラーの偽装のコア部分)を統合して
ネットワークリクエスト構築します。ヘッダーを追加できます。 、プロキシなど
(1)単純なネットワークリクエストを開始します:
urlopenメソッド:urllib.request.urlopen(url(必須)、data = None、[timeout、] *、cafile = None、capath = None、cadefault = False、 context = None)
url:文字列またはリクエストオブジェクトに
することができます。データは、GET(リクエストに直接表示される)またはPOST(フォームはURLに表示されません。フォームはdata = b "です。 ~~~~~~ ")、POST
タイムアウト未満のGETセキュリティ:エラーに応答してこの時間を超えると、数秒で、高速レートを指定したときに、プログラムがエラーを維持できなくなります
*強制されますキーワード引数の形式で
返すcafilecaは、証明書の発行を管理する組織です。これは、認証後のみであり、公証の機能を備えています。
戻り値:要求後、urllib.responseオブジェクトが返されます。結果を処理するためのいくつかの属性とメソッドが含まれています。
応答属性:読み取り(1回のみ使用可能)バイト文字列、すべてのコンテンツgetcodeステータスコード情報の取得応答ヘッダー情報の取得
(2)ヘッダーの追加(urlopenメソッドと組み合わせたより完全なリクエストの作成使用するには、urlopenメソッドのみを使用してください(データがある場合)post)、4つのタイプのみをリクエストオブジェクトで使用できます)
その中のUser-Agentは、使用しているサーバーをサーバーに通知します
Requestは、完全なネットワークリクエストを送信してから、リクエストオブジェクトを返すオブジェクトです。ヘッダー
ヘッダー: "User-Agent": "Python-urllib / 3.6"は、辞書
request.urlopen(request.Request······)の形式である必要があります

メソッドが読み取られるurllib.responseのオブジェクトを返します(1回のみ使用でき、複数の印刷を追加すると空の文字が返されます)readline()info()geturl()getcode()
(3)操作Cookie(ロギング時に使用)で、セッションテクノロジーでは、クローラーはCookieを操作しないふりをする必要があり
ますCookieオブジェクトを作成します-Cookieハンドラーを作成します-CookieハンドラーをパラメーターとしてOpennerオブジェクトを作成します-このオープナーを使用してリクエストを送信します、User-Agentはそれらがフレンドリーなプロキシサーバーであることを示し、
Cookieは有効期限、期限
(4)プロキシ(最も安全なリクエスト方法)
url = "http ~~~~~ / ip(ipプロキシ)"を使用します。クロールリクエスト用にCookieを操作すると、IPを簡単にブロックできます。 。より良いふりをするために、ヘッダーリクエストヘッダーを追加する場合は、ヘッダーなしで成功したリクエストを書き込む必要はありません。
プロキシアドレス(httpがプロキシされるアドレスを参照)-プロキシプロセッサ(以下Cookieと同様)-Opennerオブジェクトを
作成し、オブジェクト作成後にプロキシを使用します。読み取った戻り値を見ると、アドレスがプロキシアドレスになっていることがわかります
。2。urllib.error例外処理モジュール(次の場合に実行される処理)リクエストは正常に処理できません)
URLError:エラー例外モジュールの基本クラス、リクエストモジュールによって生成された例外このクラスを使用して
HTTPErrorを処理できます:これはURLErrorのサブクラスであり、主に3つの属性Code、reason、ヘッダーでは、
tryとexceptを使用して、error.HTTPError as e:print(e.Code)、を除くエラーをチェックできます。
クローラーがアクセスされていないことをサーバーが検出し、エラーの原因やその他の情報がフィードバックされていることを確認してから、URLErrorまたはHTTPError
3を介してエラー分析を実行します。urllib.parse:url解析モジュール(リクエストモジュール、特別なURLの作成時)
urlにはascii文字のみを含めることができ、
単一パラメーターのトランスコーディング:
parse.quote()はasciiコードを変換し、parse.unquote()は元の意味に
変換します複数パラメーターのトランスコーディング:
parse.urlencode( )
parse.parse_qs()will辞書
4に戻ります。urllib.robotparse:robots.txt解析モジュール
robots.txtはWebサイトでのアナウンスであり、クローラーは従わない可能性がありますが、解析モジュールはコンテンツを学習できます。 URL
プロトコル(インターネットクローラーの除外基準)の後にrobots.txtを追加してロボットを参照してください。通常、Webサイトは、クローラーがアクセスできないように作成されています。ただし、クローラーは通常、
ユーザーエージェントに準拠していません。BaiduspiderはBaiduクローラーのクロールを
意味します。許可しない:/ baiduは、Baiduディレクトリ内のすべてのデータのクロールが許可されないことを意味します。
次に、urllib3ライブラリ(サードパーティの標準ライブラリ、非公式。最初に確立します。後続の操作用の接続プール。urllibで相互に補完でき
ますHTTPクライアント用のPythonライブラリ、100%のテストカバレッジ(非常に安定したライブラリ)
最初にプールを管理するオブジェクトをインスタンス化し、次にその要求
送信します。メソッドはhttpです。 (管理プールオブジェクト).request( "GET"、 "~~~")リクエストモジュールの
リクエストメソッドも使用されます:
ソースコード:request(self、method、url、fields(urllib dataと同等)= None、headers = None、** urlopen_kw(カスタムキーワードパラメーター))

url:文字列の形式のみであり、リクエストオブジェクトではありません。つまり、Request(url(ここではリクエストオブジェクト))形式ではなく、http.request(url(ここではありません))形式ではありません。要求オブジェクト))。
戻り値:およびurllib応答オブジェクト
print( "status"、response.status)印刷文字列statusおよび応答オブジェクトのステータスコード
も同じです。プロキシ形式はurllibの形式と似ています。ここではhttp管理プールオブジェクトの代わりに、プロキシオブジェクトに置き換えられます。proxy= urllib3 .proxyManager( "http ~~~")
res = proxy.request( "get、~~~~")
streamメソッドは大量に抽出できますデータの
要求データ:

get、head、およびdeleteリクエストの場合、クエリパラメータは、辞書タイプのパラメータフィールドを提供することで追加できます(フォームを追加するのではなく(投稿によって送信される)、パラメータを追加します)。通常、
投稿リクエストと入力リクエストの後にはurlが続きます、urlでエンコードする必要がありますパラメータを正しい形式に変換してから、それらをurlに接続します。転送フォームはfieldsパラメータで追加できます:fields = {'field': '·······' }
GET内のフィールドの内容は、ポスト内のフィールドの内容がフォームになるように、パラメータとなるであろう。
JSONモジュールを介して、負荷が(辞書データ型json.loadsを変換する方法であって、~~~~ 〜)["json"(最初にロードしてから抽出し、jsonデータを抽出します。
フォームの場合は、フォームフォームのデータを抽出します)]
['fields']の場合は、コンテンツを抽出します。ファイルのアップロード、さまざまなデータの抽出、背面に書き込むことができます
ファイルのアップロード:ファイルの
画像のアップロード:バイナリデータ
応答オブジェクトはurllibに似ていますが、対応する属性も提供されます。データ属性データは
応答として返さます。jsonデータが返さます
プロセスストリーム
ごとにモジュールをjsonして、バイナリデータへのより良い応答に戻すことができます。3つ、urllib3ダウンロードイメージBaidu

クローラーの一般的な開発プロセス
ページページにリクエストを送信して、画像に対応するURLを取得し、画像のURLを抽出してから、画像のURLから画像リソースを取得して保存します(データの永続性、保存ディレクトリへの
書き込みはosライブラリを使用できます)write regular抽出されたものは、使用する前にソースコードに含まれている必要があります。Data-imgurlは他のURLキーを使用できません。たとえば、thumbURL
はforループに追加されたenumerate()を使用します。画像を抽出します
。forの後に、列挙コンテナを受け取る変数がもう1つあります。列挙オブジェクトの添え字os.mkdir( "cat")コマンドを使用して、ディレクトリを作成します。
img_name = 'cat /' + str(inedx)= 'jpg'
“ wb”はバイナリ書き込みモードで開かれ、ファイルのみを書き込むことができます。ファイルが存在しない場合は、ファイルを作成してください。

HTTPBinを使用してHTTPライブラリをテストします。http://httpbin.org
http://httpbin.org/get Webサイトにアクセスし、後ろにgetと入力して、ユーザーが要求した情報を取得します。未処理のIPはユーザーのローカルIPです。アドレス
http://httpbin.org/get?name = '·······'ここで、get?がフォーマットの後に追加し、パラメーターをリクエストに渡します。その後、いくつかのメソッドを使用して
戻り値がどのようなバイトであるかを確認できます。バイト文字列:ストレージバイト(0-255)
str string:Unicode文字を格納します(0-65535)

img_urlの「\」の場合:
img_url = img_url.replace( "\"、 "")\を削除し、\を空にし、\なしでhttpにすると、それを使用できます。

インデックスの場合、enumerate(imgs_url)のimg_url:保存する前に抽出されたデータを列挙します。そうしないと、画像はすでに画像を持っているファイルを上書きします

osモジュール作成フォルダ

クロール防止メカニズムについては、画像のWebページにアクセスしてソースコードを表示したり、XHRでリクエストヘッダーまたはリクエストURLを見つけたりして、セキュリティプロトコルを回避できます。

おすすめ

転載: blog.csdn.net/qwe863226687/article/details/114116471