喜马拉雅页面网络爬虫(Python)

获取网页中对应主播的相关专辑的每条声音播放次数

#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'爬虫,爬爬...'
		
	#初始化加载页面并将其转码存储
	def	User_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'\<div class=\"detailContent_title\"\>\<h1\>(.*?)\<\/h1\>',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('\<div class=\"username\"\>\r\n\s*(.*?)\r\n',page,re.S)
		self.UserName=UserName[0]
		print u'主播名:',self.UserName.encode("utf-8").decode("utf-8")
		#获取专辑名
		AlbumName=re.findall('\<div class=\"detailContent_title\"\>\<h1\>(.*?)\<\/h1\>',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('\<span\>(\d\d\d\d\-\d\d-\d\d)\<\/span\>',page,re.S)

		#获取声音播放次数
		TrackPlayTimes=re.findall('class=\"sound_playcount\"\>(\d+)\<\/span\>',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'爬虫,爬爬...'
		
	#初始化加载页面并将其转码存储
	def	User_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'\<div class=\"detailContent_title\"\>\<h1\>(.*?)\<\/h1\>',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('\<div class=\"username\"\>\r\n\s*(.*?)\r\n',page,re.S)
		self.UserName=UserName[0]
		print u'主播名:',self.UserName.encode("utf-8").decode("utf-8")
		#获取专辑名
		AlbumName=re.findall('\<div class=\"detailContent_title\"\>\<h1\>(.*?)\<\/h1\>',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('\<span\>(\d\d\d\d\-\d\d-\d\d)\<\/span\>',page,re.S)

		#获取声音播放次数
		TrackPlayTimes=re.findall('class=\"sound_playcount\"\>(\d+)\<\/span\>',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()


转载于:https://my.oschina.net/u/2291665/blog/885031

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值