实现个爬虫小例子,用浏览器登录百度帐号后,不要退出。
运行如下代码:
1 # -*- coding: utf-8 -*- 2 import re,sys 3 import urllib,urllib2,cookielib 4 class Requests: 5 def __init__(self): 6 cj = cookielib.CookieJar() 7 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 8 urllib2.install_opener(opener) 9 self.src=None 10 self.content=None 11 def get(self,url): 12 self.src=urllib2.urlopen(url) 13 self.content=self.src.read() 14 self.src.close() 15 return self.content 16 17 def getMusic(v,num): 18 var={'top':'song'} #现在仅支持获取榜单音乐 19 s=Requests() 20 body=s.get("http://music.baidu.com/"+v) 21 22 ids=re.findall("href="/"+var[v]+"/d+",body) 23 if not ids: 24 sys.exit(-1) 25 idlists=[] 26 fg=len("href="/"+var[v])+1 27 for i in ids: 28 idlists.append(i[fg:]) 29 if num>len(idlists): 30 num=len(idlists) 31 for songId in idlists[0:num]: 32 body=s.get("http://music.baidu.com/"+var[v]+"/"+songId) 33 if not body: 34 print songId,": no response." 35 return -1; 36 #print body 37 38 name=re.search("<title>S*,",body) 39 if not name: 40 print "no name" 41 return -1; 42 strname=name.group() 43 name=strname.split(',')[0][7:] 44 print name, 45 46 fd=open(name+".mp3","wb+") 47 gs=re.findall("http://S+xcodeS+",body) 48 if gs: 49 for i in gs: 50 url=i[0:len(i)-1] 51 mp3=s.get(url) 52 fd.write(mp3) 53 print "成功!" 54 else: 55 print "失败!" 56 fd.close() 57 if __name__=='__main__': 58 getMusic('top',2) #获取2首
会在你的代码文件当前目录下创建下载的音乐。
解析html仅用的re模块,倒是可以用HTMLParser等模块,这里比较简单就没用。