python模塊--urllib

首先用python的爬蟲可以做很多的事情,今天主要做一下利用urllib這個包中的方法從網上下載一些東西
一、python下載網絡資源
python中下載需要用到的是urllib這個模塊,先介紹一下這個模塊的一些方法:

urllib.urlopen(url[, data[, proxies]])
url就是下載網站的url地址;
data代表的是我們請求這個網站的時候要傳遞的參數,可以是GET或者是POST方式的數據;比如我們要進入某一個頁面,但是這個頁面需要我們傳遞參數纔可以進入那我們就可以用GET方式:

data = urllib.urlencode({"contains":"buddy"})
u = urllib.urlopen("http://localhost/users/all/?%s" % data)
或者我們可以使用POST方式:

data = urllib.urlencode({"name":"buddy lindsey","height":"5 foot 5 inches"})
u = urllib.urlopen("http://localhost/users/create", data)
這樣我們的參數就可以傳遞過去了,不過一般情況下是不需要的。
proxies代表是是否使用代理的方式,代理服務器是介於瀏覽器和Web服務器之間的一臺服務器,通過使用代理的形式,瀏覽器不是直接到Web服務器去取回網頁而是向代理服務器發出請求,請求信號會先送到代理服務器,由代理服務器來取回瀏覽器所需要的信息並傳送給你的瀏覽器。這種情況很多,比如我們有的時候要通過代理的方式使用谷歌。代理的格式是一個字典值的形式,使用代理:

# Use http://www.someproxy.com:3128 for http proxying
proxies = {'http': 'http://www.someproxy.com:3128'}
filehandle = urllib.urlopen(some_url, proxies=proxies)
# Don't use any proxies
filehandle = urllib.urlopen(some_url, proxies={})
# Use proxies from environment - both versions are equivalent
filehandle = urllib.urlopen(some_url, proxies=None)
filehandle = urllib.urlopen(some_url)
這個方法中後兩個參數是可選的,一般情況下我們只要指定url就可以了,data默認就是None,proxies在默認的情況下也是None。

urllib.urlretrieve(url[, filename[, reporthook[, data]]])
urlretrieve方法直接將遠程數據下載到本地。參數filename指定了保存到本地的路徑;參數reporthook是一個回調函數,當連接上服務器、以及相應的數據塊傳輸完畢的時候會觸發該回調,該回調函數有三個參數。參數data指post到服務器的數據。該方法返回一個包含兩個元素的元組(filename, headers),filename表示保存到本地的路徑,header表示服務器的響應頭。下面是一個完整的使用urllib的例子,從網站上下載html的內容保存到本地文件

# -*- coding:utf-8 -*-
import urllib
def hook(a, b, c):
    '''回調函數
    @a: 已經下載的數據塊
    @b: 數據塊的大小
    @c: 遠程文件的大小
    '''
    per = 100.0 * a * b / c
    if per > 100:
        per = 100
    print '%.2f%%' % per

url = 'http://www.csdn.net'
local = 'd://csdn.html'
urllib.urlretrieve(url, local, hook)

參考:
http://www.stamhe.com/?p=1091
http://buddylindsey.com/basic-urllib-get-and-post-with-and-without-data/
http://tool.oschina.net/apidocs/apidoc?api=python2.7.3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章