urllib

1.urllib.urlopen

  • 語法:urlopen(url, data=None, proxies=None, context=None)
    Create a file-like object for the specified URL to read from.打開一個url(可以是本地路徑),返回一個包含該url文件內(nèi)容的類文件句柄欣除。若url為網(wǎng)絡(luò)地址尿贫,則需要加上http://
  • 類文件句柄的常用方法:
  • read(),readline(),readlines(),close()吉懊,這些方法的使用方式類似文件對象缩膝。
  • getcode(),返回http狀態(tài)碼膜楷,如200表示讀取成功砾嫉,404表示頁面未找到。
  • geturl()大咱,返回請求的url恬涧。
  • info(),返回一個httplib.HTTPMessage對象,表示遠程服務(wù)器返回的頭信息碴巾,一般有如下方法:
  • headers:返回完整的頭信息
  • gettype():返回content-type溯捆,如text/html等
  • getheader()/getheaders(),如對象.getheader('Content-Type')返回Content-Type的值厦瓢。
  • items()/keys()/values():返回頭信息的字典形式提揍。

2.urllib.urlretrieve

  • 語法:urlretrieve(url, filename=None, reporthook=None, data=None, context=None),將url定位到的html文件存儲到本地磁盤中煮仇。filename為要保存到本地的文件劳跃,reporthook為下載狀態(tài)報告。
  • reportook:
  • 參數(shù)1:當前傳輸?shù)膲K數(shù)浙垫;
  • 參數(shù)2:塊大信俾亍郑诺;
  • 參數(shù)3:數(shù)據(jù)總大小杉武;
  • 返回值為一個二元數(shù)組(filename,HTTPMessage),filename為儲存在本地的文件名辙诞,HTTPMessage為返回的頭信息。

實例如下:

import urllib

def progress(blk,blk_size,total_size):
    print '%d/%d - %0.2f%%'%(blk*blk_size,total_size,(float)(blk*blk_size)*100/total_size)

url=r'http://blog.kamidox.com'
s=urllib.urlretrieve(url,'index.html',reporthook=progress)

返回值為:

0/15625 - 0.00%
8192/15625 - 52.43%
16384/15625 - 104.86%

注:以上實例運行版本為Python2艺智,(float)(blk*blk_size)表示將(blk*blk_size)轉(zhuǎn)化為浮點數(shù)倘要,()必須保留。

3.urllib.urlencode
把字典數(shù)據(jù)轉(zhuǎn)換為url編碼
用途:

  • 對url參數(shù)進行編碼
  • 對post上去的form數(shù)據(jù)進行編碼

實例:
#coding:utf8
import urllib

params={'score':100,'name':'爬蟲基礎(chǔ)','comment':'very good'}
qs=urllib.urlencode(params)
print qs

運行結(jié)果為:

comment=very+good&score=100&name=%E7%88%AC%E8%99%AB%E5%9F%BA%E7%A1%80

4.urlparse.parse_qs
把url編碼轉(zhuǎn)換為字典數(shù)據(jù)
實例:
#coding:utf8
import urllib
import urlparse

params={'score':100,'name':'爬蟲基礎(chǔ)','comment':'very good'}
qs=urllib.urlencode(params)
print qs
D=urlparse.parse_qs(qs)
for key in D:
    print key,' : ',D[key][0]

print '*'*32
#某百度圖片網(wǎng)址
url1='http://image.baidu.com/search/detail?ct=503316480&z=0&ipn=d&word=%E9%AB%98%E6%B8%85%E6%91%84%E5%BD%B1&step_word=&pn=0&spn=0&di=0&pi=&rn=1&tn=baiduimagedetail&is=&istype=2&ie=utf-8&oe=utf-8&in=&cl=2&lm=-1&st=-1&cs=339723779%2C3080645013&os=47246623%2C2505896560&simid=&adpicid=0&ln=1000&fr=&fmq=1452691568095_R&ic=0&s=undefined&se=&sme=&tab=0&width=&height=&face=undefined&ist=&jit=&cg=&bdtype=-1&objurl=http%3A%2F%2Fwww.hkstv.hk%3A8080%2Fadver%2Fpicture%2F2014%2F5%2F0c64828b-8e37-4d11-8a58-880382981731.jpg&fromurl=ippr_z2C%24qAzdH3FAzdH3F2k_z%26e3Bv6t_z%26e3BvgAzdH3F9da08AzdH3Fda89AzdH3FanAzdH3F8dAzdH3F0cn8f99m8dlm_z%26e3Bip4&gsm=0'
result1=urlparse.urlparse(url1)#返回一個urlparse解析對象
print result1
D1=urlparse.parse_qs(result1.query)
for key in D1:
    print key,' : ',D1[key][0]

運行結(jié)果為:

comment=very+good&score=100&name=%E7%88%AC%E8%99%AB%E5%9F%BA%E7%A1%80
comment  :  very good
score  :  100
name  :  爬蟲基礎(chǔ)
********************************
ParseResult(scheme='http', netloc='image.baidu.com', path='/search/detail', params='', query='ct=503316480&z=0&ipn=d&word=%E9%AB%98%E6%B8%85%E6%91%84%E5%BD%B1&step_word=&pn=0&spn=0&di=0&pi=&rn=1&tn=baiduimagedetail&is=&istype=2&ie=utf-8&oe=utf-8&in=&cl=2&lm=-1&st=-1&cs=339723779%2C3080645013&os=47246623%2C2505896560&simid=&adpicid=0&ln=1000&fr=&fmq=1452691568095_R&ic=0&s=undefined&se=&sme=&tab=0&width=&height=&face=undefined&ist=&jit=&cg=&bdtype=-1&objurl=http%3A%2F%2Fwww.hkstv.hk%3A8080%2Fadver%2Fpicture%2F2014%2F5%2F0c64828b-8e37-4d11-8a58-880382981731.jpg&fromurl=ippr_z2C%24qAzdH3FAzdH3F2k_z%26e3Bv6t_z%26e3BvgAzdH3F9da08AzdH3Fda89AzdH3FanAzdH3F8dAzdH3F0cn8f99m8dlm_z%26e3Bip4&gsm=0', fragment='')
tab  :  0
cl  :  2
ipn  :  d
spn  :  0
cs  :  339723779,3080645013
ic  :  0
face  :  undefined
ie  :  utf-8
ct  :  503316480
ln  :  1000
lm  :  -1
fmq  :  1452691568095_R
tn  :  baiduimagedetail
istype  :  2
rn  :  1
pn  :  0
gsm  :  0
di  :  0
fromurl  :  ippr_z2C$qAzdH3FAzdH3F2k_z&e3Bv6t_z&e3BvgAzdH3F9da08AzdH3Fda89AzdH3FanAzdH3F8dAzdH3F0cn8f99m8dlm_z&e3Bip4
adpicid  :  0
bdtype  :  -1
word  :  楂樻竻鎽勫獎
objurl  :  http://www.hkstv.hk:8080/adver/picture/2014/5/0c64828b-8e37-4d11-8a58-880382981731.jpg
oe  :  utf-8
st  :  -1
s  :  undefined
z  :  0
os  :  47246623,2505896560

5.實例:獲取雅虎財經(jīng)股票數(shù)據(jù)
5.1接口介紹

5.2源代碼
# -- coding: utf-8 --
import urllib
import os
import datetime

def download_stock_data(stock_list):
    base_dir=os.path.dirname(__file__)#獲取文件夾路徑
    for sid in stock_list:
        url=r'http://table.finance.yahoo.com/table.csv?s='+sid
        fname=base_dir+'/stock/'+sid+'.csv'
        print 'downloading %s form %s'%(sid,url)
        urllib.urlretrieve(url,fname)

def download_stock_data_in_period(stock_list,start,end):
    base_dir=os.path.dirname(__file__)
    for sid in stock_list:
        params={'a':start.month-1,'b':start.day,'c':start.year,
                'd':end.month-1,'e':end.day,'f':end.year,'s':sid}
        url=r'http://table.finance.yahoo.com/table.csv?'
        qs=urllib.urlencode(params)
        url=url+qs
        fname=base_dir+'/stock/'+'%s_%d%d%d_%d%d%d.csv'%(
            sid,start.year,start.month,start.day,end.year,
            end.month,end.day)
        print 'downloading %s form %s'%(sid,url)
        if urllib.urlopen(url).getcode()==404:
            print '%s 不存在'%sid
        else:
            urllib.urlretrieve(url,fname)

if __name__=='__main__':
    stock_list=['300001.sz','300002.sz','123.sz']
    #download_stock_data(stock_list)
    start=datetime.date(2015,11,17)
    end=datetime.date(2015,12,17)
    download_stock_data_in_period(stock_list,start,end)
    #print os.path.dirname(__file__)

運行結(jié)果:

downloading 300001.sz form http://table.finance.yahoo.com/table.csv?a=10&c=2015&b=17&e=17&d=11&f=2015&s=300001.sz
downloading 300002.sz form http://table.finance.yahoo.com/table.csv?a=10&c=2015&b=17&e=17&d=11&f=2015&s=300002.sz
downloading 123.sz form http://table.finance.yahoo.com/table.csv?a=10&c=2015&b=17&e=17&d=11&f=2015&s=123.sz
123.sz 不存在
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末味抖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子灰粮,更是在濱河造成了極大的恐慌仔涩,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粘舟,死亡現(xiàn)場離奇詭異熔脂,居然都是意外死亡喝噪,警方通過查閱死者的電腦和手機郭计,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來癣猾,“玉大人晰骑,你說我怎么就攤上這事适秩。” “怎么了硕舆?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵隶症,是天一觀的道長。 經(jīng)常有香客問我岗宣,道長,這世上最難降的妖魔是什么淋样? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任耗式,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘刊咳。我一直安慰自己彪见,他們只是感情好,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布娱挨。 她就那樣靜靜地躺著余指,像睡著了一般。 火紅的嫁衣襯著肌膚如雪跷坝。 梳的紋絲不亂的頭發(fā)上酵镜,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音柴钻,去河邊找鬼淮韭。 笑死,一個胖子當著我的面吹牛贴届,可吹牛的內(nèi)容都是我干的靠粪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼毫蚓,長吁一口氣:“原來是場噩夢啊……” “哼占键!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起元潘,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤畔乙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后柬批,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啸澡,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年氮帐,在試婚紗的時候發(fā)現(xiàn)自己被綠了嗅虏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡上沐,死狀恐怖皮服,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情参咙,我是刑警寧澤龄广,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蕴侧,受9級特大地震影響择同,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜净宵,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一敲才、第九天 我趴在偏房一處隱蔽的房頂上張望裹纳。 院中可真熱鬧,春花似錦紧武、人聲如沸剃氧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朋鞍。三九已至,卻和暖如春妥箕,著一層夾襖步出監(jiān)牢的瞬間滥酥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工矾踱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留恨狈,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓呛讲,卻偏偏與公主長得像禾怠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贝搁,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容