検索
ホームページバックエンド開発Python チュートリアル【Python】Webクローラ(5):urllib2の使い方詳細とWebサイト巡回手法

先ほど urllib2 の簡単な紹介について説明しましたが、ここでは urllib2 の使用方法について詳しく説明します。


1.プロキシ設定

urllib2は、環境変数http_proxyを使用してデフォルトでHTTPプロキシを設定します。

環境変数の影響を受けずにプログラム内で Proxy を明示的に制御したい場合は、プロキシを使用できます。

新しい test14 を作成して単純なプロキシ デモを実装します:

import urllib2  
enable_proxy = True  
proxy_handler = urllib2.ProxyHandler({"http" : 'http://some-proxy.com:8080'})  
null_proxy_handler = urllib2.ProxyHandler({})  
if enable_proxy:  
    opener = urllib2.build_opener(proxy_handler)  
else:  
    opener = urllib2.build_opener(null_proxy_handler)  
urllib2.install_opener(opener)

ここで注意すべき点の 1 つは、urllib2.install_opener() を使用すると、urllib2 のグローバル オープナーが設定されることです。

これは後で使用する場合に非常に便利ですが、プログラム内で 2 つの異なる Proxy 設定を使用したい場合など、より詳細な制御はできません。

より良いアプローチは、グローバル設定を変更するために install_opener を使用するのではなく、グローバル urlopen メソッドの代わりにオープナーの open メソッドを直接呼び出すことです。


2. タイムアウト設定
Python の古いバージョン (Python 2.6 より前) では、urllib2 の API はタイムアウト設定を公開していません。タイムアウト値を設定するには、ソケットのグローバル タイムアウト値を変更することしかできません。

import urllib2  
import socket  
socket.setdefaulttimeout(10) # 10 秒钟后超时  
urllib2.socket.setdefaulttimeout(10) # 另一种方式

Python 2.6 以降では、urllib2.urlopen() の timeout パラメーターを通じてタイムアウトを直接設定できます。

import urllib2  
response = urllib2.urlopen('http://www.google.com', timeout=10)

3. HTTP リクエストに特定のヘッダーを追加します

ヘッダーを追加するには、Request オブジェクトを使用する必要があります:

import urllib2  
request = urllib2.Request('http://www.baidu.com/')  
request.add_header('User-Agent', 'fake-client')  
response = urllib2.urlopen(request)  
print response.read()

一部のヘッダーには特に注意してください。サーバーはこれらのヘッダーをチェックします
ユーザーエージェント:一部のサーバーまたはプロキシは、この値を使用して、リクエストがブラウザーによって行われたかどうかを判断します。
Content-Type: REST インターフェイスを使用する場合、サーバーはこの値をチェックして、HTTP 本文のコンテンツをどのように解析するかを決定します。一般的な値は次のとおりです:
application/xml: RESTful/SOAP などの XML RPC を呼び出すときに使用されます
application/json: JSON RPC を呼び出すときに使用されます
application/x-www-form-urlencoded: ブラウザーが Web フォームを送信するときに使用しますサーバーが提供する RESTful または SOAP サービスを使用する場合、誤った Content-Type 設定によりサーバーがサービスを拒否します



4。Redirect

urllib2 は HTTP 3XX リターン コードに対してリダイレクト アクションを自動的に実行します。デフォルトでは、手動構成は必要ありません。リダイレクト アクションが発生したかどうかを検出するには、レスポンスの URL とリクエストの URL が一致しているかどうかを確認するだけです。

import urllib2  
my_url = 'http://www.google.cn'  
response = urllib2.urlopen(my_url)  
redirected = response.geturl() == my_url  
print redirected  
  
my_url = 'http://rrurl.cn/b1UZuP'  
response = urllib2.urlopen(my_url)  
redirected = response.geturl() == my_url  
print redirected

自動的にリダイレクトしたくない場合は、下位レベルの httplib ライブラリを使用することに加えて、HTTPRedirectHandler クラスをカスタマイズすることもできます。


import urllib2  
class RedirectHandler(urllib2.HTTPRedirectHandler):  
    def http_error_301(self, req, fp, code, msg, headers):  
        print "301"  
        pass  
    def http_error_302(self, req, fp, code, msg, headers):  
        print "303"  
        pass  
  
opener = urllib2.build_opener(RedirectHandler)  
opener.open('http://rrurl.cn/b1UZuP')

5.Cookie

urllib2 も Cookie を自動的に処理します。 Cookie 項目の値を取得する必要がある場合は、次のようにすることができます:

import urllib2  
import cookielib  
cookie = cookielib.CookieJar()  
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))  
response = opener.open('http://www.baidu.com')  
for item in cookie:  
    print 'Name = '+item.name  
    print 'Value = '+item.value

実行後、Baidu にアクセスするための Cookie 値が出力されます:

【Python】Webクローラ(5):urllib2の使い方詳細とWebサイト巡回手法

6. HTTP PUT メソッドと DELETE メソッド

urllib2 のみを使用します。 HTTP GET および POST メソッドをサポートしていますが、HTTP PUT および DELETE を使用する場合は、下位レベルの httplib ライブラリのみを使用できます。それでも、次の方法で urllib2 が PUT または DELETE リクエストを発行できるようにすることができます:

import urllib2  
request = urllib2.Request(uri, data=data)  
request.get_method = lambda: 'PUT' # or 'DELETE'  
response = urllib2.urlopen(request)

7. HTTP リターン コードを取得します

200 OK の場合は、urlopen メソッドによって返された応答オブジェクトの getcode() を使用して取得します。 HTTP 戻りコード。ただし、他の戻りコードの場合、urlopen は例外をスローします。このとき、例外オブジェクトの code 属性を確認する必要があります:

import urllib2  
try:  
    response = urllib2.urlopen('http://bbs.csdn.net/why')  
except urllib2.HTTPError, e:  
    print e.code

8.デバッグログ

urllib2 を使用する場合、以下のメソッドでデバッグログを開くことができ、送受信の内容が確認できます。パケットは画面に表示され、デバッグに便利です。場合によっては、パケット キャプチャの作業を保存できます

import urllib2  
httpHandler = urllib2.HTTPHandler(debuglevel=1)  
httpsHandler = urllib2.HTTPSHandler(debuglevel=1)  
opener = urllib2.build_opener(httpHandler, httpsHandler)  
urllib2.install_opener(opener)  
response = urllib2.urlopen('http://www.google.com')

このようにして、送信されたデータ パケットの内容を確認できます:

【Python】Webクローラ(5):urllib2の使い方詳細とWebサイト巡回手法


9。フォーム処理

ログインするにはフォームへの記入が必要ですが、フォームへの記入方法は?

まず、ツールを使用して、入力するフォームのコンテンツを傍受します。

たとえば、私は通常、Firefox + httpfox プラグインを使用して、送信したパッケージを確認します。
verycd を例として考えます。まず、送信した POST リクエストと POST フォーム項目を見つけます。
verycd の場合、username、password、 continueURI、fk、login_submit を入力する必要があることがわかります。このうち、fk はランダムに生成されます (実際にはそれほどランダムではなく、単にエポックタイムをエンコードすることによって生成されているように見えます)。 「Web ページの取得から開始する必要がある」とは、最初に Web ページにアクセスし、正規表現などのツールを使用して、返されたデータ内の fk 項目をインターセプトする必要があることを意味します。名前の通り、 continueURI は気軽に書けるのに対し、login_submit は固定であることがソースコードからも分かります。ユーザー名とパスワードもありますが、これは明白です:

# -*- coding: utf-8 -*-  
import urllib  
import urllib2  
postdata=urllib.urlencode({  
    'username':'汪小光',  
    'password':'why888',  
    'continueURI':'http://www.verycd.com/',  
    'fk':'',  
    'login_submit':'登录'  
})  
req = urllib2.Request(  
    url = 'http://secure.verycd.com/signin',  
    data = postdata  
)  
result = urllib2.urlopen(req)  
print result.read()

10. ブラウザに偽装してアクセスします

一部の Web サイトはクローラーの訪問を嫌うため、クローラーからのリクエストを拒否します
現時点では、ブラウザに偽装する必要があります。 、これは、

#…  
  
headers = {  
    'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'  
}  
req = urllib2.Request(  
    url = 'http://secure.verycd.com/signin/*/http://www.verycd.com/',  
    data = postdata,  
    headers = headers  
)  
#...

11 を達成するために http パッケージのヘッダーを変更することで実行できます。「アンチホットリンク」に対処するには

一部のサイトには、いわゆるアンチホットリンク設定があります。実際、それを行うのは非常に簡単です。率直に言って、


それはあなたが送信するリクエストのヘッダーをチェックするためです、それはそれ自身のリファラーサイトです

それで、私たちはこのウェブサイトへのヘッダーのリファラーを変更するだけで済みます:

#...
headers = {
    'Referer':'http://www.cnbeta.com/articles'
}
#...


headers は dict データ構造で、好きなものを入れることができます。必須のヘッダーは、何らかの偽装を行うために使用されます。

たとえば、一部の Web サイトはヘッダーの X-Forwarded-For を読み取り、実際の IP を確認することを好み、X-Forwarde-For を直接変更できます。

上記は、[Python] Web クローラー (5): urllib2 の使用方法の詳細と Web サイトのクローリング技術です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
どのデータ型をPythonアレイに保存できますか?どのデータ型をPythonアレイに保存できますか?Apr 27, 2025 am 12:11 AM

Pythonlistscanstoreanydatatype,arraymodulearraysstoreonetype,andNumPyarraysarefornumericalcomputations.1)Listsareversatilebutlessmemory-efficient.2)Arraymodulearraysarememory-efficientforhomogeneousdata.3)NumPyarraysareoptimizedforperformanceinscient

Pythonアレイに間違ったデータ型の値を保存しようとするとどうなりますか?Pythonアレイに間違ったデータ型の値を保存しようとするとどうなりますか?Apr 27, 2025 am 12:10 AM

heouttemptemptostoreavure ofthewrongdatatypeinapythonarray、yure counteractypeerror.thisduetothearraymodule'sstricttypeeencultionyを使用します

Python Standard Libraryの一部はどれですか:リストまたは配列はどれですか?Python Standard Libraryの一部はどれですか:リストまたは配列はどれですか?Apr 27, 2025 am 12:03 AM

PythonListSarePartOfThestAndardarenot.liestareBuilting-in、versatile、forStoringCollectionsのpythonlistarepart。

スクリプトが間違ったPythonバージョンで実行されるかどうかを確認する必要がありますか?スクリプトが間違ったPythonバージョンで実行されるかどうかを確認する必要がありますか?Apr 27, 2025 am 12:01 AM

theScriptisrunningwithwrongthonversionduetorectRectDefaultEntertersettings.tofixthis:1)CheckthedededefaultHaulthonsionsingpython - versionorpython3-- version.2)usevirtualenvironmentsbycreatingonewiththon3.9-mvenvmyenv、andverixe

Pythonアレイで実行できる一般的な操作は何ですか?Pythonアレイで実行できる一般的な操作は何ですか?Apr 26, 2025 am 12:22 AM

PythonArraysSupportVariousoperations:1)SlicingExtractsSubsets、2)Appending/ExtendingAdddesements、3)inSertingSelementSatspecificpositions、4)remvingingDeletesements、5)sorting/verversingsorder、and6)listenionsionsionsionsionscreatenewlistsebasedexistin

一般的に使用されているnumpy配列はどのようなアプリケーションにありますか?一般的に使用されているnumpy配列はどのようなアプリケーションにありますか?Apr 26, 2025 am 12:13 AM

numpyarraysAressertialentionsionceivationsefirication-efficientnumericalcomputations andDatamanipulation.theyarecrucialindatascience、mashineelearning、物理学、エンジニアリング、および促進可能性への適用性、scaledatiencyを効率的に、forexample、infinancialanalyyy

Pythonのリスト上の配列を使用するのはいつですか?Pythonのリスト上の配列を使用するのはいつですか?Apr 26, 2025 am 12:12 AM

UseanArray.ArrayOverAlistinPythonは、Performance-criticalCode.1)homogeneousdata:araysavememorywithpedelements.2)Performance-criticalcode:Araysofterbetterbetterfornumerumerumericaleperations.3)interf

すべてのリスト操作は配列でサポートされていますか?なぜまたはなぜですか?すべてのリスト操作は配列でサポートされていますか?なぜまたはなぜですか?Apr 26, 2025 am 12:05 AM

いいえ、notallistoperationSaresuptedbyarrays、andviceversa.1)arraysdonotsupportdynamicoperationslikeappendorintorintorinsertizizing、whosimpactsporformance.2)リスト

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、