pythonのwebモジュール学習--urllib
いくつかの列を書くpythonのwebモジュール学習を準備し、urllib、urllib 2、httplib、urlparse、requestsを含む基本的によく使われるwebモジュールについて、今、私たちの最初のモジュールの学習を始めましょう.
1 urllibの概要
python urllibモジュールは、指定したURLアドレスからWebデータを取得し、分析処理を行い、目的のデータを取得します.
2一般的な方法
2.1 urlopen--指定したURLを読み込むクラスファイルオブジェクトを作成します.
Pythonはurlopen関数を使用してhtmlデータを取得し、urlopenはクラスファイルオブジェクトを返します.これは次の一般的な方法を提供します.
1)read()、readline()、readline()、fileno()、close():これらの方法の使用はファイルオブジェクトと全く同じです.2)info():httplibを返します.HTTPMessageオブジェクトは,リモートサーバが返すヘッダ情報を表す.3)getcode():httpリクエストの場合、200はリクエストが正常に完了したことを示すHttpステータスコードを返す.404は、ウェブサイトが見つからないことを示す.4)geturl():要求されたurlアドレスを返します.
添付コード:
urllibには、urlを符号化、復号するためのいくつかの補助方法も提供される.urlには特殊な記号は現れず、特殊な用途がある記号もあります.get方式でデータをコミットする場合、urlにkey=valueという文字列が追加されることを知っていますので、valueでは'='は許されませんので、符号化します.同時にサーバがこれらのパラメータを受信した場合,復号を行い,元のデータに復元する.この場合、これらの補助方法は役に立ちます.
付随する他の方法:(主にurl符号化復号)
添付コード:
2.2 urlretrieve--リモートのデータを直接ローカルにダウンロード
次はurlretrieveメソッドのダウンロードファイルの例です.ダウンロードの進捗状況を表示できます.
2.3 urlcleanup--urllibのためクリアする.urlretrieve()によるキャッシュ
上記の練習からurlopenは、リモートhtmlページ情報を簡単に取得し、pythonで必要なデータを分析し、使いたいデータをマッチングし、urlretrieveを利用してローカルにダウンロードできることがわかります.アクセス制限や接続数に制限があるリモートurlアドレスはproxies(エージェント方式)で接続でき、リモートデータ量が大きすぎてシングルスレッドのダウンロードが遅すぎるとマルチスレッドでダウンロードできるのが伝説の爬虫類です.
上記の最初の2つの方法はurllibで最もよく使われる方法で、これらの方法はリモートデータを取得する際に内部でURLopenerまたはFancyURLOpenerクラスを使用します.urllibの使用者として、私たちはこの2つのクラスをあまり使いません.urllibの実装に興味がある場合、またはurllibがより多くのプロトコルをサポートすることを望む場合、この2つのクラスを検討することができる.Pythonマニュアルでは、urllibの著者がこのモジュールの欠陥と不足をリストしており、興味のある人はPythonマニュアルを開いて理解することができます.
urllib :https://docs.python.org/2/library/urllib.html
1 urllibの概要
python urllibモジュールは、指定したURLアドレスからWebデータを取得し、分析処理を行い、目的のデータを取得します.
2一般的な方法
2.1 urlopen--指定したURLを読み込むクラスファイルオブジェクトを作成します.
help(urllib.urlopen)
urlopen(url, data=None, proxies=None)
Create a file-like object for the specified URL to read from.
:
url : , http ftp 。
data : get post url 。
proxies : 。
Pythonはurlopen関数を使用してhtmlデータを取得し、urlopenはクラスファイルオブジェクトを返します.これは次の一般的な方法を提供します.
1)read()、readline()、readline()、fileno()、close():これらの方法の使用はファイルオブジェクトと全く同じです.2)info():httplibを返します.HTTPMessageオブジェクトは,リモートサーバが返すヘッダ情報を表す.3)getcode():httpリクエストの場合、200はリクエストが正常に完了したことを示すHttpステータスコードを返す.404は、ウェブサイトが見つからないことを示す.4)geturl():要求されたurlアドレスを返します.
添付コード:
>>> import urllib
>>> response = urllib.urlopen('http://www.51cto.com')
>>>res.read()
。。。。。。( )
>>>res.readline()
'html PUBLIC "-//W3C//DTDXHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
'
。。。。
>>>res.readlines()
。。。(list )
>>>res.info()
>>> response.getcode() # Http
200
>>> response.geturl() # url
'http://www.51cto.com'
>>> response.close() #
urllibには、urlを符号化、復号するためのいくつかの補助方法も提供される.urlには特殊な記号は現れず、特殊な用途がある記号もあります.get方式でデータをコミットする場合、urlにkey=valueという文字列が追加されることを知っていますので、valueでは'='は許されませんので、符号化します.同時にサーバがこれらのパラメータを受信した場合,復号を行い,元のデータに復元する.この場合、これらの補助方法は役に立ちます.
付随する他の方法:(主にurl符号化復号)
- urllib.quote(string[, safe]): 。 safe
- urllib.unquote(string) :
- urllib.quote_plus(string [ , safe ] ) : urllib.quote , '+' ' ', quote '%20' ' '
- urllib.unquote_plus(string ) :
- urllib.urlencode(query[, doseq]): dict url 。 {'name': 'wklken', 'pwd':'123'} "name=wklken&pwd=123" ( )
# urlopen post get
- urllib.pathname2url(path): url
- urllib.url2pathname(path): url
添付コード:
>>> import urllib
>>>res = urllib.quote('I am 51cto')
>>> res
'I%20am%2051cto'
>>>urllib.unquote(res)
'I am 51cto'
>>>res = urllib.quote_plus('I am 51cto')
>>> res
'I+am+51cto'
>>>urllib.unquote_plus(res)
'I am 51cto'
>>> params = {'name':'51cto','pwd':'51cto'}
>>>urllib.urlencode(params)
'pwd=51cto&name=51cto'
>>>l2u=urllib.pathname2url('E:\51cto')
'E%3A%29cto'
>>>urllib.url2pathname(l2u)
'E:)cto'
2.2 urlretrieve--リモートのデータを直接ローカルにダウンロード
help(urllib.urlretrieve)
urlretrieve(url, filename=None,reporthook=None, data=None)
:
url : URL
finename : ( ,urllib 。
reporthook : , 、 , 。
data: post , (filename,headers) ,
次はurlretrieveメソッドのダウンロードファイルの例です.ダウンロードの進捗状況を表示できます.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib
import os
def schedule(a,b,c):
'''
@a:
@b:
@c:
'''
per = 100.0 * a * b / c
if per > 100:
per = 100
print "%.2f%%" % per
url = 'http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2'
local = os.path.join('c:','Python-2.7.5.tar.bz2')
urllib.urlretrieve(url,local,schedule)
2.3 urlcleanup--urllibのためクリアする.urlretrieve()によるキャッシュ
上記の練習からurlopenは、リモートhtmlページ情報を簡単に取得し、pythonで必要なデータを分析し、使いたいデータをマッチングし、urlretrieveを利用してローカルにダウンロードできることがわかります.アクセス制限や接続数に制限があるリモートurlアドレスはproxies(エージェント方式)で接続でき、リモートデータ量が大きすぎてシングルスレッドのダウンロードが遅すぎるとマルチスレッドでダウンロードできるのが伝説の爬虫類です.
上記の最初の2つの方法はurllibで最もよく使われる方法で、これらの方法はリモートデータを取得する際に内部でURLopenerまたはFancyURLOpenerクラスを使用します.urllibの使用者として、私たちはこの2つのクラスをあまり使いません.urllibの実装に興味がある場合、またはurllibがより多くのプロトコルをサポートすることを望む場合、この2つのクラスを検討することができる.Pythonマニュアルでは、urllibの著者がこのモジュールの欠陥と不足をリストしており、興味のある人はPythonマニュアルを開いて理解することができます.
urllib :https://docs.python.org/2/library/urllib.html