バージョン番号: Python2.7.5、Python3 には大きな変更があります。別のチュートリアルを探してください。
いわゆるWebページのクローリングとは、URLアドレスで指定されたネットワークリソースをネットワークストリームから読み取り、ローカルに保存することです。
IEブラウザの機能をシミュレートするプログラムと同様に、HTTPリクエストの内容としてURLがサーバーに送信され、サーバーの応答リソースが読み取られます。
Python では、urllib2 コンポーネントを使用して Web ページをクロールします。
urllib2 は、URL (Uniform Resource Locators) を取得する Python のコンポーネントです。
urlopen 関数の形式で非常にシンプルなインターフェイスを提供します。
最も単純な urllib2 アプリケーション コードには 4 行しか必要ありません。
urllib2 の役割を確認するために新しいファイル urllib2_test01.py を作成します:
import urllib2 response = urllib2.urlopen('http://www.baidu.com/') html = response.read() print html
F5 を押して操作の結果を確認します:
Baidu ホームページを右クリックして開きます。 [ソース コードの表示] (Firefox または Google Chrome) を選択すると、まったく同じコンテンツが表示されます。 言い換えると、上記の 4 行のコードは、Baidu にアクセスしたときにブラウザーが受信したすべてのコードを出力します。 これは urllib2 の最も単純な例です。 URLは「http:」の他に「ftp:」や「file:」などにも置き換えることができます。 HTTP はリクエストとレスポンスのメカニズムに基づいています: クライアントがリクエストを作成し、サーバーがレスポンスを提供します。 urllib2 は、Request オブジェクトを使用して、作成した HTTP リクエストをマップします。 その最も単純な使用形式では、リクエストするアドレスを含む Request オブジェクトを作成します。 urlopen を呼び出して Request オブジェクトを渡すと、関連するリクエスト応答オブジェクトが返されます。 この応答オブジェクトは次のとおりです。ファイル オブジェクトと同様なので、応答で .read() を呼び出すことができます。 新しいファイル urllib2_test02.py を作成して体験してみましょう: 出力内容が test01 と同じであることがわかります。 urllib2 は、同じインターフェースを使用してすべての URL ヘッダーを処理します。たとえば、次のような FTP リクエストを作成できます。 HTTP リクエストを行うときに、さらに 2 つのことを行うことができます。 1. データ フォーム データを送信する この内容は、Web 側を担当したことがある方にはよく知られていると思います 場合によっては、URL にデータを送信する必要があります (通常、URL は CGI に関連しています)。 [Common Gateway Interface] スクリプト、またはその他の WEB アプリケーション フック)。 HTTP では、これはよく知られた POST リクエストを使用して送信されることがよくあります。 これは通常、HTML フォームを送信するときにブラウザーによって行われます。 すべての POST がフォームから発生するわけではありません。POST を使用して任意のデータを独自のプログラムに送信できます。 一般的な HTML フォームの場合、データを標準フォームにエンコードする必要があります。次に、それをデータ パラメーターとして Request オブジェクトに渡します。 エンコード作業では、urllib2 の代わりに urllib 関数を使用します。 新しいファイル urllib2_test03.py を作成して体験してみましょう: data パラメーターが送信されない場合、urllib2 は GET リクエストを使用します。 GET リクエストと POST リクエストの違いは、POST リクエストには通常「副作用」があることです。 何らかの方法でシステムの状態を変更します (ゴミの山を玄関に送り込むなど)。 データは、Get リクエスト内の URL 自体にエンコードして送信することもできます。 このようにして、DataデータのGet送信が実現されます。 2. ヘッダーを http リクエストに設定する サイトによっては、プログラムによるアクセス (人間以外のアクセス) を好まないサイトや、異なるバージョンのコンテンツを異なるブラウザに送信するサイトがあります。 デフォルトの urllib2 は、それ自体を「Python-urllib/x.y」として識別します (x と y は、Python-urllib/2.7 などの Python のメジャー バージョン番号とマイナー バージョン番号です)、 ブラウザは、User-Agent ヘッダーを通じてその身元を確認します。リクエスト オブジェクトを作成するときに、ヘッダー データを含むディクショナリを与えることができます。 以下の例は上記と同じコンテンツを送信しますが、それ自体を Internet Explorer としてシミュレートします。 (皆さんに思い出していただきありがとうございます。このデモはもう利用できませんが、原則は同じです)。 上記は、[Python] Web クローラー (2): urllib2 を使用して、指定された URL を通じて Web コンテンツをクロールする方法です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。 import urllib2
req = urllib2.Request('http://www.baidu.com')
response = urllib2.urlopen(req)
the_page = response.read()
print the_page
req = urllib2.Request('ftp://example.com/')
import urllib
import urllib2
url = 'http://www.someserver.com/register.cgi'
values = {'name' : 'WHY',
'location' : 'SDU',
'language' : 'Python' }
data = urllib.urlencode(values) # 编码工作
req = urllib2.Request(url, data) # 发送请求同时传data表单
response = urllib2.urlopen(req) #接受反馈的信息
the_page = response.read() #读取反馈的内容
import urllib2
import urllib
data = {}
data['name'] = 'WHY'
data['location'] = 'SDU'
data['language'] = 'Python'
url_values = urllib.urlencode(data)
print url_values
name=Somebody+Here&language=Python&location=Northampton
url = 'http://www.example.com/example.cgi'
full_url = url + '?' + url_values
data = urllib2.open(full_url)
この ID はサイトを混乱させるか、単に機能しない可能性があります。 import urllib
import urllib2
url = 'http://www.someserver.com/cgi-bin/register.cgi'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
values = {'name' : 'WHY',
'location' : 'SDU',
'language' : 'Python' }
headers = { 'User-Agent' : user_agent }
data = urllib.urlencode(values)
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
the_page = response.read()