python爬取百度音乐(二)——保存数据到mysql中
来源:互联网 发布:酒店水牌通过网络发送 编辑:程序博客网 时间:2024/05/22 22:48
上篇博客只是爬取了网页上的数据并打印出来,但是在实际开发应用中,数据是要持久保存起来的,数据可以保存到关系型数据库如:mysql中或NoSQL数据库中如:mongodb
这篇博客是把数据保存到mysql数据库中
采用的模块是pymysql,[使用方法]http://www.runoob.com/python3/python3-mysql.html
本程序的数据代码段:
# 保存音乐信息到数据库中def savaMusicToDB(m_id,m_name,m_link,m_type,m_singer,m_album,m_click,m_collect): print 'savaMusicToDB start' DBConnection=getDBConnection() print 'dbconnection='+str(DBConnection) #创建游标 cursor=DBConnection.cursor() sql='insert into orgmusic(m_id,m_name,m_link,m_type,m_singer,m_album,m_click,m_collect) values(%s,%s,%s,%s,%s,%s,%s,%s)' cursor.execute(sql,(m_id,m_name,m_link,m_type,m_singer,m_album,m_click,m_collect)) DBConnection.commit() closeDBConnection(DBConnection,cursor)#建立数据库连接def getDBConnection(): print 'getDBConnection start' host = '182.254.220.188' port = 3306 user = 'root' password = 'ldy123456' db = 'music' charset = 'utf8' # 建立数据库链接 DBConnection=pymysql.connect(host=host,port=port,user=user,passwd=password,db=db,charset=charset) return DBConnection#关闭数据库连接def closeDBConnection(DBConnection): DBConnection.close()#关闭数据库连接和游标def closeDBConnection(DBConnection,cursor): cursor.close() DBConnection.close()
本爬虫完整代码:
#coding=utf-8 #设置编码#获取百度音乐import urllib2from bs4 import BeautifulSoupimport pymysqlimport datetimeimport random#百度音乐的根路径urlbaiduMusicRootURL='http://music.baidu.com'#百度音乐分类的基本的根路径urlbaiduMusicTagURL='http://music.baidu.com/tag'#获取音乐的分类标签def getMusicTags(musicTagURL): print 'getMusicTag='+musicTagURL musicTags={} htmlContent=getHTML(musicTagURL) print 'getMusicTags='+htmlContent #解析网页,获取分类标签 soup=BeautifulSoup(htmlContent,'lxml') Tags=soup.find_all('span','tag-list clearfix') #print Tags for tag in Tags: #获取连接文本内容 tagName=tag.get_text() #获取链接 aSoup=BeautifulSoup(str(tag),'lxml') a=aSoup.select_one('a[href]') tagLink=a.get('href') #tagName作为键,tagLink作为值保存到字典中 musicTags[tagName]=tagLink return musicTags#获取网页def getHTML(musicTagURL): print 'getHTML= '+musicTagURL headers={} request=urllib2.Request(musicTagURL,headers=headers) response=urllib2.urlopen(request) htmlContent=response.read() return htmlContent#获取该页面的所有歌曲的内容def getAllMusic(sourceURL): print 'getAllMusic start sourceURL='+sourceURL noData='#' try: #获取页面数量 size=20 sURL=sourceURL+'?start=0&size=20&third_type=0' htmlContent=getHTML(sURL) soup=BeautifulSoup(htmlContent,'lxml') aLists=soup.find_all('div','page-inner') if aLists: aSoup = BeautifulSoup(str(aLists), 'lxml') pageNumberLists = aSoup.find_all('a') #print pageNumberLists if pageNumberLists: aStr=pageNumberLists[len(pageNumberLists)-2] #print 'aStr='+str(aStr) pageASoup=BeautifulSoup(str(aStr),'lxml') pageNumber=int(pageASoup.find('a').get_text()) else: pageNumber=0 else: pageNumber=0 print 'pageNumber='+str(pageNumber) #获取该类型的所有歌曲 count = 0 for i in range(0,pageNumber+1): print 'i='+str(i) sURL='' try: sURL=sourceURL+'?start='+str(count)+'&size=20&third_type=0' print 'sURL='+sURL #获取每个页面上的歌曲 # 获取html页面 htmlContent = getHTML(sURL) # 对页面进行解析 soup = BeautifulSoup(htmlContent, 'lxml') # 获取歌曲类型 m_type= soup.find('span', 'title').get_text() print 'm_type=' + m_type #获取歌曲列表 musicList=soup.find('div','main-body-cont') #print 'musicListSoup='+str(musicList) musicListSoup=BeautifulSoup(str(musicList),'lxml') musicsLists=musicListSoup.find_all('div','song-item') print 'musicsLists='+ str(musicsLists) print 'musicsLists len='+str(len(musicsLists)) for music in musicsLists: #print 'music='+str(music) # 获取(设置)id m_id = setMusicID() print 'm_id=' + m_id musicSoup=BeautifulSoup(str(music),'lxml') # 获取歌曲名和歌曲链接 spanStr = musicSoup.find('span', 'song-title') spanSoup = BeautifulSoup(str(spanStr), 'lxml') # 获取歌曲名 m_name = spanSoup.find('a').get_text() if not m_name: m_name=noData print 'm_name=' + m_name # 获取歌曲链接 m_link = baiduMusicRootURL + spanSoup.select_one('a[href]').get('href') if not m_link: m_link=noData print 'm_link=' + m_link # 获取歌手名 m_singer = musicSoup.find('span', 'author_list').get_text() #第一个字符是‘\n’ if m_singer and len(m_singer)>1: nStr = m_singer[0:1] if nStr == '\n': m_singer = m_singer[1:len(m_singer)] else: m_singer=noData print 'm_singer len=' + str(len(m_singer)) print 'm_singer=' + m_singer # 获取专辑 m_album = musicSoup.find('span', 'album-title').get_text() if not m_album: m_album='#' print 'm_album=' + m_album # 获取(设置)点播量 m_click = 0 # 获取(设置)收藏量 m_collect = 0 # 保存到数据库中 savaMusicToDB(m_id, m_name, m_link, m_type, m_singer, m_album, m_click, m_collect) count = count + 20 except: pass except: pass#获取(设置)音乐的iddef setMusicID(): print 'setMusicID start' nowTime=datetime.datetime.now().strftime("%Y%m%d%H%M%S") randomNum=random.randint(0,1000) m_id=str(nowTime)+str(randomNum) return m_id# 保存音乐信息到数据库中def savaMusicToDB(m_id,m_name,m_link,m_type,m_singer,m_album,m_click,m_collect): print 'savaMusicToDB start' DBConnection=getDBConnection() print 'dbconnection='+str(DBConnection) #创建游标 cursor=DBConnection.cursor() sql='insert into orgmusic(m_id,m_name,m_link,m_type,m_singer,m_album,m_click,m_collect) values(%s,%s,%s,%s,%s,%s,%s,%s)' cursor.execute(sql,(m_id,m_name,m_link,m_type,m_singer,m_album,m_click,m_collect)) DBConnection.commit() closeDBConnection(DBConnection,cursor)#建立数据库连接def getDBConnection(): print 'getDBConnection start' host = '182.254.220.188' port = 3306 user = 'root' password = 'ldy123456' db = 'music' charset = 'utf8' # 建立数据库链接 DBConnection=pymysql.connect(host=host,port=port,user=user,passwd=password,db=db,charset=charset) return DBConnection#关闭数据库连接def closeDBConnection(DBConnection): DBConnection.close()#关闭数据库连接和游标def closeDBConnection(DBConnection,cursor): cursor.close() DBConnection.close()#主程序if __name__ == '__main__': print 'Music Spider start' #获取百度音乐的分类标签 musicTags=getMusicTags(baiduMusicTagURL) print musicTags #按照分类爬取音乐 for k,v in musicTags.items(): print 'k='+k print 'v='+str(v) httpStr=str(v)[0:7] if httpStr=='http://': sourceURL=str(v) else: sourceURL=baiduMusicRootURL+str(v) print 'sourceURL='+sourceURL #获取歌曲 getAllMusic(sourceURL)
不喜勿喷!!!
阅读全文
0 0
- python爬取百度音乐(二)——保存数据到mysql中
- Python-爬取百度音乐
- Python 爬取百度音乐
- tushare笔记(二)——数据保存到mysql
- Python爬虫-利用百度地图API接口爬取数据并保存至MySQL数据库
- python爬取数据练习(二)---lxml数据爬取后存储在数据库mysql中
- python爬虫之爬取百度音乐
- python爬虫之爬取百度音乐
- python爬取糗事百科数据并保存到sqlite中,命令行读出
- 使用python及百度API对百度poi数据进行爬取(二)
- Python爬取百度新闻数据并将时间统计到EXCEL中
- scrapy 详细实例-爬取百度贴吧数据并保存到文件和和数据库中
- python使用scrapy爬取qq音乐(二)
- python抓取省市区的数据并保存到mysql中
- 保存数据到MySql数据库——我用scrapy写爬虫(二)
- python爬取拉勾网数据保存到mysql数据库
- #python学习笔记#使用python爬取网站数据并保存到数据库
- python爬虫系列之爬取百度文库(二)
- 抽象工厂模式
- C++学习之路(9)---C++面向对象的总结
- HDU6152 Friend-Graph 数学|签到|Ramsey定理
- 一个不知名的项目--Day03
- JavaEE关于全局参数的
- python爬取百度音乐(二)——保存数据到mysql中
- JS Date函数整理
- 剑指offer 面试题63 二叉搜索树的第 k 个结点
- JavaScript中的==和===
- Leetcode 21. Merge Two Sorted Lists
- 方格分割
- 虚拟币开发专题(山寨币怎样通过挖矿最后把储存的币出完)
- python入门(三十):类的成员
- 【机器学习实战 第九章】树回归 CART算法的原理与实现