python大作业报告(爬虫 分析 可视化)_爬虫综合大作业——网易云音乐《Five Hours》爬虫&可视化分析...

爬虫综合大作业

选择一个热点或者你感兴趣的主题。

选择爬取的对象与范围。

了解爬取对象的限制与约束。

爬取相应内容。

做数据分析与文本分析。

形成一篇文章,有说明、技术要点、有数据、有数据分析图形化展示与说明、文本分析图形化展示与说明。

文章公开发布。

1. 数据爬取

我们本次爬取的对象是一首名为《five hours》的经典电音流行歌曲,Five Hours是Erick Orrosquieta于2014年4月发行的单曲,当年这首单曲就出现在奥地利,比利时,法国,荷兰,挪威,瑞典和瑞士的榜单中。

作者Erick Orrosquieta,一般为人熟知的是他的艺名Deorro,2014年世界百大DJ排名十九位。1991年8月29日生于美国洛杉矶,墨西哥血统的音乐制作人,签约Ultra Records,2014年他创立了唱片公司Panda Funk。Deorro以前用过TON!C这个名字。Deorro的音乐倾向Melbourne Bounce风格,融合Dutch、 moombah, progressive、 house、贝斯等多种元素和风格,几分钟就可以点炸现场气氛。他的这首单曲“Five Hours”登顶Most Played on Dance Radio和Most Played on Top 40 radio Mixshows。

而在爬虫部分主要是调用官方API,本次用到的API主要有两个:

①获取评论:

http://music.163.com/api/v1/resource/comments/R_SO_4_{歌曲ID}?limit={每页限制数量}&offset={评论数总偏移}

②获取评论对应用户的信息:

https://music.163.com/api/v1/user/detail/{用户ID}

完成后的项目文件图如下:

1.1 评论爬取

具体代码如下:

1 from urllib importrequest2 importjson3 importpymysql4 from datetime importdatetime5 importre6

7 ROOT_URL = 'http://music.163.com/api/v1/resource/comments/R_SO_4_%s?limit=%s&offset=%s'

8 LIMIT_NUMS = 50 #每页限制爬取数

9 DATABASE = 'emp' #数据库名

10 TABLE = 'temp1' #数据库表名

11 #数据表设计如下:

12 '''

13 commentId(varchar)14 content(text) likedCount(int)15 userId(varchar) time(datetime)16 '''

17 PATTERN = re.compile(r'[\n\t\r\/]') #替换掉评论中的特殊字符以防插入数据库时报错

18

19 defgetData(url):20 if noturl:21 returnNone, None22 headers ={23 "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36',24 "Host": "music.163.com",25 }26 print('Crawling>>>' +url)27 try:28 req = request.Request(url, headers=headers)29 content = request.urlopen(req).read().decode("utf-8")30 js =json.loads(content)31 total = int(js['total'])32 datas =[]33 for c in js['comments']:34 data =dict()35 data['commentId'] = c['commentId']36 data['content'] = PATTERN.sub('', c['content'])37 data['time'] = datetime.fromtimestamp(c['time']//1000)38 data['likedCount'] = c['likedCount']39 data['userId'] = c['user']['userId']40 datas.append(data)41 returntotal, datas42 exceptException as e:43 print('Down err>>>', e)44 pass

45

46 defsaveData(data):47 if notdata:48 returnNone49 conn = pymysql.connect(host='localhost', user='root', passwd='123456', db='emp', charset='utf8mb4') #注意字符集要设为utf8mb4,以支持存储评论中的emoji表情

50 cursor =conn.cursor()51 sql = 'insert into' + TABLE + '(commentId,content,likedCount,time,userId) VALUES (%s,%s,%s,%s,%s)'

52

53 for d indata:54

55 try:56 #cursor.execute('SELECT max(c) FROM '+TABLE)

57 #id_ = cursor.fetchone()[0]

58

59 cursor.execu

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值