【python学习.Github上的代码】

本文介绍了一个简单的Python脚本,用于从Xiami音乐网站获取歌曲信息,并实现歌曲下载功能。脚本利用了正则表达式、urllib和urllib2库,展示了如何解析网页XML内容来提取歌曲的地理位置、歌词和图片。此外,还提供了下载歌曲、歌词和图片的完整流程,包括使用urllib.urlretrieve进行文件下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import re, urllib, urllib2
                             
class Xiami(object):
                             
    def __init__(self, url_song):
        self.url_song = url_song       
        self.url_xml = self.get_xml()
        self.info = self. get_info()
        self.loc = self.info[0]
        self.lyc = self.info[1]
        self.pic = self.info[2]
                                 
    def get_xml(self):
         return 'http://www.xiami.com/song/playlist/id/%s/object_name/default/object_id/0' % re.search('\d+', self.url_song).group()
                             
    def get_info(self):
        headers = {
            'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'
        }
        req = urllib2.Request(
            url = self.url_xml,
            headers = headers
        )
        try:
            xml = urllib2.urlopen(req).read()
        except Exception, e:
            raise u'网络错误!,请重试!'
        location = re.search(r'(<location>)(.+)(<\/location>)', xml).group(2)
        lyc = re.search(r'(<lyric>)(.+)(<\/lyric>)', xml).group(2) 
        pic = re.search(r'(<pic>)(.+)(<\/pic>)', xml).group(2) 
        return (location, lyc, pic)
                             
    def get_url(self):
        strlen = len(self.loc[1:])
        rows = int(self.loc[0])
        cols = strlen / rows
        right_rows = strlen % rows
        new_str = self.loc[1:] 
        real_url = ''
                             
        for i in xrange(strlen):
            x = i % rows
            y = i / rows
            p = 0
            if x <= right_rows:
                p = x * (cols + 1) + y
            else:
                p = right_rows * (cols + 1) + (x - right_rows) * cols + y
            real_url += new_str[p]
        return urllib2.unquote(real_url).replace('^', '0')
                             
if __name__ == '__main__':
                             
    url = raw_input('please enter the url of the song: ')
    xi = Xiami(url)
    url_download = xi.get_url()
    url_pic = xi.pic
    url_lyc = xi.lyc
                             
    print u'下载地址是: %s' % url_download
                             
    print u"下载开始..."
                           
    try:
        urllib.urlretrieve(url_download, r'new.mp3')
        urllib.urlretrieve(url_pic, r'new.jpg')
        urllib.urlretrieve(url_lyc, r'new.lyc')
    except:
        raise(u'请求错误,请重试')
                                 
    print u"完成下载..."

1.这些代码都很简单易读懂,必要地方还有注释,方便别人阅读,也方便自己找错误

2.充分利用类的设计,我们现在的小程序都很小所以没有什么必要用类,但这种面向对象的精神应该保留下来,方便以后适应大型程序的开发

3.变量名已看就懂。我的嗲吗有时候变量名图个省事就用a,b,c代替,这样有时会适得其反

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值