pythonのwebモジュール学習--urllib


いくつかの列を書くpythonのwebモジュール学習を準備し、urllib、urllib 2、httplib、urlparse、requestsを含む基本的によく使われるwebモジュールについて、今、私たちの最初のモジュールの学習を始めましょう.
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