代碼轉自oschina http://www.oschina.net/code/list_by_user?id=120579
發表在這裡只是為了學習存檔,如果您不允許轉載,請通知我,我立刻處理。
因為我是python的初學者,但是又不滿足於手中所學,覺得python可以做一些簡單的應用。
之前看到有人用python寫的金山快盤簽到程式,有道詞典查詞程式,我覺得很有意思,我也想學學。
以下是我遇到的一些有意思的例子
python列出目前的目錄下的檔案代碼
from os.path import basename, isdirfrom os import listdirdef traverse(path, depth=0): print depth* '| ' + '|_', basename(path) if(isdir(path)): for item in listdir(path): traverse(path+'/'+item, depth+1)if __name__ == '__main__': traverse('./')
python抓取統計局網站各縣市資料
#! /usr/bin/env python# -*- coding: utf-8 -*-'''抓取 國家統計局網站 上的最新縣及縣以上行政區劃代碼,並儲存成 json 格式的js檔案by Conanca'''import urllib2,jsonurl_prefix = 'http://www.stats.gov.cn/tjbz/xzqhdm/'var_text = 'xzqh'code_text = 'C'name_text = 'N'sub_text = 'S'file_path = 'xzqh.js'def set_proxy(proxy): ''' 設定Proxy 伺服器 ''' urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler({'http' : proxy})))def get_latest_page(): ''' 擷取最新的行政區劃代碼公布頁 ''' content = urllib2.urlopen(url_prefix + 'index.htm').read() index_start = content.find("<td width='76%' height='20' valign='middle'><a href='") + 53 index_end = content.find("' target='_blank' class='a2'>") xzqhdm_url = content[index_start:index_end] xzqhdm_url = url_prefix + xzqhdm_url print 'latest page:' + xzqhdm_url return xzqhdm_urldef crawl_page(xzqhdm_url): ''' 爬行政區劃代碼公布頁 ''' print 'crawling...' content = urllib2.urlopen(xzqhdm_url).read() index_start = content.find('''<td class='content'><span class="content">''') + 42 index_end = content.find("<BR></span></td>") content = content[index_start:index_end] # print content return contentdef convert(content): ''' 將爬到的內容轉換為行政區劃 list ''' print 'converting...' item_arr = content.replace(' ','*').split('<BR>') p_list = [] current_p = {} current_p_sub = [] current_c = {} current_c_sub = [] current_d = {} for item_str in item_arr: #print item_str if item_str.count('*')==1: print 'got a province:'+item_str if len(current_p)!=0: # 為當前省 設定其子項;省列表中添加當前省 current_p[sub_text] = current_p_sub p_list.append(current_p) # 賦值 當前省;初始化 當前省的子項 current_p = creat_item(item_str) current_p_sub = [] elif item_str.count('*')==3: print '********got a city:'+item_str # 賦值 當前市;初始化 當前市的子項 current_c = creat_item(item_str) current_c_sub = [] if len(current_c)!=0: # 為當前市 設定其子項;當前省的子項中添加當前市 current_c[sub_text] = current_c_sub current_p_sub.append(current_c) elif item_str.count('*')>=5: print '****************got a district:'+item_str # 賦值 當前區縣;當前市的子項中添加當前區縣 current_d = creat_item(item_str) current_c_sub.append(current_d) else : print 'invaild item string:'+item_str return p_listdef creat_item(item_str): ''' 根據字串建立條目對象 ''' t = item_str.split(' ') code = t[0].replace('*','') name = t[1].replace('*','') item = {code_text:code,name_text:name} #print item return itemdef write_to(content,file_path): ''' 將行政區劃列表寫入指定的js檔案中 ''' print 'writing...' f = open(file_path, 'w') f.write('var {0}={1}'.format(var_text,content)) f.close() print 'finished!' if __name__ == '__main__': #set_proxy('http://192.168.2.61:8080') url = get_latest_page() content = crawl_page(url) p_list = convert(content) content = json.dumps(p_list,ensure_ascii=False,separators=(',',':')).decode('gb18030').encode('utf-8') write_to(content,file_path)
可將抓取到的資料存在out檔案裡,ubuntu下亂碼。
使用iconv命令轉碼即可。
iconv -f gb2312 -t utf8 filename
從百度音樂抓取音樂,指定頻道。
這個程式抓取普通品質的音樂,我想抓取高一點的音樂,只是不知道該怎麼做。不知的python有沒有與html互動的模組可以調用。
#-*- coding: utf-8 -*-importre,urllibbaseurl= "http://music.baidu.com"url= "http://music.baidu.com/search/tag?key=古典"html= urllib.urlopen(url).read()uri= re.findall(r'/song/\d+',html,re.M)lst= []print urifor i in uri:link=baseurl+i+'/download'print linklst.insert(0,link)for k in lst:res = urllib.urlopen(k).read()down = re.search('http://[^ ]*xcode.[a-z0-9]*',res,re.M).group()print downs1 = re.search('title=".*',res,re.M).group()print s1s2 = re.search('>.*<.a',s1,re.M).group()print s2s3 = s2[1:-3]print s3urllib.urlretrieve(down, s3+'.mp3')