ネット爬虫類の初級
2563 ワード
まず、PythonがWebページをキャプチャするライブラリを見てみましょう.urllibまたはurllib 2です.
ではurllibとurllib 2の違いは何でしょうか.
urllib 2をurllibの増幅と見なすことができ、比較的明らかな優位性はurllib 2である.urlopen()は、パラメータとしてRequestオブジェクトを受け入れることができ、HTTP Requestのヘッダ部を制御することができる.
HTTP Requestをするときはなるべくurllib 2ライブラリを使うべきですが、urllib.urlretrieve()関数およびurllib.quoteなどの一連のquoteやunquote機能はurllib 2に組み込まれていないため、urllibの補助が必要になる場合もある.
urllib.Open()ここで入力されるパラメータは、http、ftp、fileなど、いくつかのプロトコルに従います.例:
urllib.open('http://www.baidu.com')
urllib.open('file:D\Python\Hello.py')
Webサイト上のすべてのgif形式の画像をダウンロードする例があります.ではPythonコードは次のとおりです.
上記の方法によれば、一定のページをキャプチャし、必要なデータを抽出することができます.
実際,urllibというモジュールを用いてネットワーク爬虫類を作るのは極めて効率的ではないが,Tornado Webサーバを紹介する.
Tornado web serverはPythonを使用して作成された軽量級、高伸縮性、非ブロックIOのWebサーバソフトウェアで、有名なFriendfeedサイトはそれを使用して構築されています.Tornadoは他の主流のWebサーバフレームワーク(主にPythonフレームワーク)とは異なり、epoll非ブロックIOを採用し、応答が迅速で、数千の同時接続を処理することができ、特にリアルタイムのWebサービスに適している.
Tornado WebサーバでWebページをキャプチャする方が効率的です.
Tornadoの公式サイトから見るとbackportsもインストールされています.ssl_match_hostname、公式サイトは以下の通りです.
http://www.tornadoweb.org/en/stable/
urllib 2の一般的な方法:
(1)info()WebページのHeader情報の取得
(2)getcode()Webページのステータスコードを取得する
(3)geturl()受信したURLを取得する
(4)read()ファイルの内容を読み取る
ではurllibとurllib 2の違いは何でしょうか.
urllib 2をurllibの増幅と見なすことができ、比較的明らかな優位性はurllib 2である.urlopen()は、パラメータとしてRequestオブジェクトを受け入れることができ、HTTP Requestのヘッダ部を制御することができる.
HTTP Requestをするときはなるべくurllib 2ライブラリを使うべきですが、urllib.urlretrieve()関数およびurllib.quoteなどの一連のquoteやunquote機能はurllib 2に組み込まれていないため、urllibの補助が必要になる場合もある.
urllib.Open()ここで入力されるパラメータは、http、ftp、fileなど、いくつかのプロトコルに従います.例:
urllib.open('http://www.baidu.com')
urllib.open('file:D\Python\Hello.py')
Webサイト上のすべてのgif形式の画像をダウンロードする例があります.ではPythonコードは次のとおりです.
import re
import urllib
def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
return html
def getImg(html):
reg = r'src="(.*?\.gif)"'
imgre = re.compile(reg)
imgList = re.findall(imgre,html)
print imgList
cnt = 1
for imgurl in imgList:
urllib.urlretrieve(imgurl,'%s.jpg' %cnt)
cnt += 1
if __name__ == '__main__':
html = getHtml('http://www.baidu.com')
getImg(html)
上記の方法によれば、一定のページをキャプチャし、必要なデータを抽出することができます.
実際,urllibというモジュールを用いてネットワーク爬虫類を作るのは極めて効率的ではないが,Tornado Webサーバを紹介する.
Tornado web serverはPythonを使用して作成された軽量級、高伸縮性、非ブロックIOのWebサーバソフトウェアで、有名なFriendfeedサイトはそれを使用して構築されています.Tornadoは他の主流のWebサーバフレームワーク(主にPythonフレームワーク)とは異なり、epoll非ブロックIOを採用し、応答が迅速で、数千の同時接続を処理することができ、特にリアルタイムのWebサービスに適している.
Tornado WebサーバでWebページをキャプチャする方が効率的です.
Tornadoの公式サイトから見るとbackportsもインストールされています.ssl_match_hostname、公式サイトは以下の通りです.
http://www.tornadoweb.org/en/stable/
import tornado.httpclient
def Fetch(url):
http_header = {'User-Agent' : 'Chrome'}
http_request = tornado.httpclient.HTTPRequest(url=url,method='GET',headers=http_header,connect_timeout=200,request_timeout=600)
print 'Hello'
http_client = tornado.httpclient.HTTPClient()
print 'Hello World'
print 'Start downloading data...'
http_response = http_client.fetch(http_request)
print 'Finish downloading data...'
print http_response.code
all_fields = http_response.headers.get_all()
for field in all_fields:
print field
print http_response.body
if __name__ == '__main__':
Fetch('http://www.baidu.com')
urllib 2の一般的な方法:
(1)info()WebページのHeader情報の取得
(2)getcode()Webページのステータスコードを取得する
(3)geturl()受信したURLを取得する
(4)read()ファイルの内容を読み取る