(转自oschina)python学习中的一些小例子

代码转自oschina http://www.oschina.net/code/list_by_user?id=120579

发表在这里只是为了学习存档,如果您不允许转载,请通知我,我立刻处理。


因为我是python的初学者,但是又不满足于手中所学,觉得python可以做一些简单的应用。

之前看到有人用python写的金山快盘签到程序,有道词典查词程序,我觉得很有意思,我也想学学。

以下是我遇到的一些有意思的例子


python列出当前目录下的文件代码

from os.path import basename, isdir
from os import listdir

def 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,json

url_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):
    ''' 设置代理服务器 '''
    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_url

def 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 content

def 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_list

def 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 item

def 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 -*-
import	re,urllib

baseurl	= "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 uri

for i in uri:
	link=baseurl+i+'/download'
	print link
	lst.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 down
	s1 = re.search('title=".*',res,re.M).group()
	print s1
	s2 = re.search('>.*<.a',s1,re.M).group()
	print s2
	s3 = s2[1:-3]
	print s3
	urllib.urlretrieve(down, s3+'.mp3')


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值