获取网页中对应主播的相关专辑的每条声音播放次数
#coding=utf-8
#---------------------------------------
# 程序:喜马拉雅专辑页
# 作者:ewang
# 日期:2016-10-28
# 语言:Python 2.7
# 功能:获取页面中声音ID、声音名、声音创建时间、声音播放次数的信息
# 保存信息到到对应文件中
#---------------------------------------
import string
import urllib2
import re
import os
class XMLY_Spider:
#申明相关属性
def __init__(self,userId,albumId):
#给DeviceRankUrl设置文件名
self.xmlyUrl="http://www.ximalaya.com/"+userId+'/album/'+albumId
#用来保存设备排名信息
self.Album_Track=[]
self.UserName=''
self.AlbumName=''
print u'爬虫,爬爬...'
#初始化加载页面并将其转码存储
defUser_Album(self):
#读取页面的原始信息
Page=urllib2.urlopen(self.xmlyUrl).read().decode('utf-8')
#获取页面标题
title=self.find_title(Page)
print u'网页中专辑的名称:'+title.encode("utf-8").decode("utf-8")
#获取页面中文本信息
self.save_infor(title)
#查找专辑名称
def find_title(self,page):
#匹配专辑
myTitle=re.search(r'\
(.*?)\',page,re.S)
#初始化标题名为暂无标题
title=u'暂无标题'
#如果标题存在把标题赋值给title
if myTitle:
#(.*?)这称作一个group,组是从1开始
title=myTitle.group(1)
else:
print u'爬虫报告:无法加载网页标题...'
return title
#保存页面信息
def save_infor(self,title):
#加载页面文本信息到数组中
self.get_infor()
try:
#创建并打开本地文件
#filename="C:\\Users\\e.wang\\Desktop\\"+title.encode("utf-8").decode("utf-8")+".csv"
f=open(filename,'wb+')
except WindowsError:
pass
#把获取的页面信息写入文件中
f.writelines(self.Album_Track)
#关闭打开的文件
f.close()
#print u'爬虫报告:文件'+title+'.csv'+u'已经下载:'+os.getcwd()
print u'按任意键退出...'
#获取页面源码并将其存储到数组中
def get_infor(self):
#获取页面中的源码
page=urllib2.urlopen(self.xmlyUrl).read()
#获取页面中声音ID、声音名、声音创建时间、声音播放次数的信息
self.deal_XMLY(page.decode("utf-8"))
def deal_XMLY(self,page):
#获取主播名
UserName=re.findall('\
self.UserName=UserName[0]
print u'主播名:',self.UserName.encode("utf-8").decode("utf-8")
#获取专辑名
AlbumName=re.findall('\
(.*?)\',page,re.S)
self.AlbumName=AlbumName[0]
print u'专辑名:',self.AlbumName.encode("utf-8").decode("utf-8")
#获取声音ID
Track_id=re.findall('track_id=\"(\d+)\" track_title',page,re.S)
#获取声音名
Track_Name=re.findall('track_title=\"(.*?)\" track_intro',page,re.S)
#获取声音创建时间
CreateTrack_Time=re.findall('\(\d\d\d\d\-\d\d-\d\d)\',page,re.S)
#获取声音播放次数
TrackPlayTimes=re.findall('class=\"sound_playcount\"\>(\d+)\',page,re.S)
#声音ID、声音名、声音创建时间、声音播放次数添加到XMLY_Ranks表中
for [trid,trnm,ctt,tpts] in zip(Track_id,Track_Name,CreateTrack_Time,TrackPlayTimes):
item=[trid,trnm,ctt,tpts]
for a in item:
self.Album_Track.append(a.encode("gbk")+",")
self.Album_Track.append("\n")
#------------程序入口处----------------
print u"""#---------------------------------------
# 程序:喜马拉雅专辑页
# 作者:ewang
# 日期:2016-10-28
# 语言:Python 2.7
# 功能:获取页面中声音ID、声音名、声音创建时间、声音播放次数的信息
# 保存信息到到对应文件中
#--------------------------------------------------
"""
print u"输入用户id:",
userid =str(raw_input())
print u"输入专辑id:",
albumid =str(raw_input())
XMLY_Name=XMLY_Spider(userid,albumid)
XMLY_Name.User_Album()
下面脚本是根据专辑页的URL来获取页面中声音的相应信息:
#coding=utf-8
#---------------------------------------
# 程序:喜马拉雅专辑页
# 作者:ewang
# 日期:2016-10-28
# 语言:Python 2.7
# 功能:获取页面中声音ID、声音名、声音创建时间、声音播放次数的信息
# 保存信息到到对应文件中
#---------------------------------------
import string
import urllib2
import re
import os
class XMLY_Spider:
#申明相关属性
def __init__(self,xmlyUrl):
#给DeviceRankUrl设置文件名
self.xmlyUrl=xmlyUrl
#用来保存声音信息
self.Album_Track=[]
self.UserName=''
self.AlbumName=''
print u'爬虫,爬爬...'
#初始化加载页面并将其转码存储
defUser_Album(self):
#读取页面的原始信息
Page=urllib2.urlopen(self.xmlyUrl).read().decode('utf-8')
#获取页面标题
title=self.find_title(Page)
print u'网页中专辑的名称:'+title.encode("utf-8").decode("utf-8")
#获取页面中文本信息
self.save_infor(title)
#查找专辑名称
def find_title(self,page):
#匹配专辑
myTitle=re.search(r'\
(.*?)\',page,re.S)
#初始化标题名为暂无标题
title=u'暂无标题'
#如果标题存在把标题赋值给title
if myTitle:
#(.*?)这称作一个group,组是从1开始
title=myTitle.group(1)
else:
print u'爬虫报告:无法加载网页标题...'
return title
#保存页面信息
def save_infor(self,title):
#加载页面文本信息到数组中
self.get_infor()
try:
#创建并打开本地文件
filename="C:\\Users\\e.wang\\Desktop\\"+title.encode("utf-8").decode("utf-8")+".csv"
f=open(filename,'wb+')
except WindowsError:
pass
#把获取的页面信息写入文件中
f.writelines(self.Album_Track)
#关闭打开的文件
f.close()
#print u'爬虫报告:文件'+title+'.csv'+u'已经下载:'+os.getcwd()
print u'按任意键退出...'
#获取页面源码并将其存储到数组中
def get_infor(self):
#获取页面中的源码
page=urllib2.urlopen(self.xmlyUrl).read()
#获取页面中声音ID、声音名、声音创建时间、声音播放次数的信息
self.deal_XMLY(page.decode("utf-8"))
def deal_XMLY(self,page):
#获取主播名
UserName=re.findall('\
self.UserName=UserName[0]
print u'主播名:',self.UserName.encode("utf-8").decode("utf-8")
#获取专辑名
AlbumName=re.findall('\
(.*?)\',page,re.S)
self.AlbumName=AlbumName[0]
print u'专辑名:',self.AlbumName.encode("utf-8").decode("utf-8")
#获取声音ID
Track_id=re.findall('track_id=\"(\d+)\" track_title',page,re.S)
#获取声音名
Track_Name=re.findall('track_title=\"(.*?)\" track_intro',page,re.S)
#获取声音创建时间
CreateTrack_Time=re.findall('\(\d\d\d\d\-\d\d-\d\d)\',page,re.S)
#获取声音播放次数
TrackPlayTimes=re.findall('class=\"sound_playcount\"\>(\d+)\',page,re.S)
#声音ID、声音名、声音创建时间、声音播放次数添加到XMLY_Ranks表中
for [trid,trnm,ctt,tpts] in zip(Track_id,Track_Name,CreateTrack_Time,TrackPlayTimes):
item=[trid,trnm,ctt,tpts]
for a in item:
self.Album_Track.append(a.encode("gbk")+",")
self.Album_Track.append("\n")
#------------程序入口处----------------
print u"""#---------------------------------------
# 程序:喜马拉雅专辑页
# 作者:ewang
# 日期:2016-10-28
# 语言:Python 2.7
# 功能:获取页面中声音ID、声音名、声音创建时间、声音播放次数的信息
# 保存信息到到对应文件中
#--------------------------------------------------
"""
print u'''#页面URL格式例子如下:
#不带page的如:http://www.ximalaya.com/14351533/album/294573
#带有page的如:http://www.ximalaya.com/14351533/album/294573?page=2
'''
print u"输入页面URL:",
xmlyUrl =str(raw_input())
XMLY_Name=XMLY_Spider(xmlyUrl)
XMLY_Name.User_Album()