• 注册
    • 回帖总排行
    • 采纳总排行
    • 财富排行榜
    • 等级排行榜
  • learner
    We are the best gift for each other
    3002453金币
    关注
  • admintest
    We are the best gift for each other
    25金币
    关注
  • 讓歷史重演
    We are the best gift for each other
    2金币
    关注
  • 冰冷
    We are the best gift for each other
    2金币
    关注
  • 扬子江
    We are the best gift for each other
    2金币
    关注
  • 空白格‭
    We are the best gift for each other
    2金币
    关注
  • 相似的清风
    We are the best gift for each other
    2金币
    关注
  • 神经蛙
    We are the best gift for each other
    2金币
    关注
  • 高谈
    We are the best gift for each other
    2金币
    关注
  • 低调
    We are the best gift for each other
    2金币
    关注
  • learner
    We are the best gift for each other
    老铁/ 387 经验
    关注
  • admintest
    We are the best gift for each other
    小兵/ 7 经验
    关注
  • 讓歷史重演
    We are the best gift for each other
    小兵/ 0 经验
    关注
  • 冰冷
    We are the best gift for each other
    小兵/ 0 经验
    关注
  • 扬子江
    We are the best gift for each other
    小兵/ 0 经验
    关注
  • 空白格‭
    We are the best gift for each other
    小兵/ 0 经验
    关注
  • 相似的清风
    We are the best gift for each other
    小兵/ 0 经验
    关注
  • 神经蛙
    We are the best gift for each other
    小兵/ 0 经验
    关注
  • 高谈
    We are the best gift for each other
    小兵/ 0 经验
    关注
  • 低调
    We are the best gift for each other
    小兵/ 0 经验
    关注
  • 默认板块 关注:1 内容:8

    用Python爬取了《开端》3w+评论数据,并将其可视化分析后,终于知道它为什么这么火了

  • 查看作者
  • 打赏作者
  • 拉黑名单
      • 如何查找视频id

      • 项目结构

        • 制作词云图

        • 制作最近评论数条形图与折线图

        • 制作每小时评论条形图与折线图

        • 制作最近评论数饼图

        • 制作每小时评论饼图

        • 制作观看时间区间评论统计饼图

        • 制作开端主演提及占比饼图

        • 制作评论内容情感分析图

        • 评论的时间戳转换为正常时间

        • 评论内容读入CSV

        • 统计一天各个时间段内的评论数

        • 统计最近评论数

        • 爬取评论内容

        • 爬取评论时间

        • 一.爬虫部分

        • 二.数据处理部分

        • 三. 数据分析

      绪论本期是对腾讯热播剧——开端的一次爬虫与数据分析,耗时一个小时,总爬取条数3W条评论,很适合新人练手,值得注意的一点是评论的情绪文本分析处理,这是第一次接触的知识。

      爬虫方面:由于腾讯的评论数据是封装在json里面,所以只需要找到json文件,对需要的数据进行提取保存即可。

      • 视频网址:https://v.qq.com/x/cover/mzc00200mp8vo9b.html

      • 评论json数据网址:https://video.coral.qq.com/varticle/7625787154/comment/v2

      • 注:只要替换视频数字id的值,即可爬取其他视频的评论

      一. 爬虫部分:
      1.爬取评论内容代码:spiders.py

      import requests
      import re
      import random
       
      def get_html(url, params):
          uapools = [
              'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36',
              'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0',
              'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/537.75.14'
          ]
       
          thisua = random.choice(uapools)
          headers = {"User-Agent": thisua}
          r = requests.get(url, headers=headers, params=params)
          r.raise_for_status()
          r.encoding = r.apparent_encoding
          r.encoding = 'utf-8'# 不加此句出现乱码
          return r.text
       
      def parse_page(infolist, data):
          commentpat = '"content":"(.*?)"'
          lastpat = '"last":"(.*?)"'
          commentall = re.compile(commentpat, re.S).findall(data)
          next_cid = re.compile(lastpat).findall(data)[0]
          infolist.append(commentall)
          return next_cid
       
       
      def print_comment_list(infolist):
          j = 0
          for page in infolist:
              print('第' + str(j + 1) + '页\n')
              commentall = page
              for i in range(0, len(commentall)):
                  print(commentall[i] + '\n')
              j += 1
       
       
      def save_to_txt(infolist, path):
          fw = open(path, 'w+', encoding='utf-8')
          j = 0
          for page in infolist:
              #fw.write('第' + str(j + 1) + '页\n')
              commentall = page
              for i in range(0, len(commentall)):
                  fw.write(commentall[i] + '\n')
              j += 1
          fw.close()
       
       
      def main():
          infolist = []
          vid = '7579013546';
          cid = "0";
          page_num = 3000
          url = 'https://video.coral.qq.com/varticle/' + vid + '/comment/v2'
          #print(url)
       
          for i in range(page_num):
              params = {'orinum': '10', 'cursor': cid}
              html = get_html(url, params)
              cid = parse_page(infolist, html)
       
       
          print_comment_list(infolist)
          save_to_txt(infolist, 'content.txt')
       
       
      main()

      2.爬取评论时间代码:sp.py

      import requests
      import re
      import random
       
       
      def get_html(url, params):
          uapools = [
              'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36',
              'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0',
              'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/537.75.14'
          ]
       
          thisua = random.choice(uapools)
          headers = {"User-Agent": thisua}
          r = requests.get(url, headers=headers, params=params)
          r.raise_for_status()
          r.encoding = r.apparent_encoding
          r.encoding = 'utf-8'# 不加此句出现乱码
          return r.text
       
       
      def parse_page(infolist, data):
          commentpat = '"time":"(.*?)"'
          lastpat = '"last":"(.*?)"'
       
          commentall = re.compile(commentpat, re.S).findall(data)
          next_cid = re.compile(lastpat).findall(data)[0]
       
          infolist.append(commentall)
       
          return next_cid
       
       
       
      def print_comment_list(infolist):
          j = 0
          for page in infolist:
              print('第' + str(j + 1) + '页\n')
              commentall = page
              for i in range(0, len(commentall)):
                  print(commentall[i] + '\n')
              j += 1
       
       
      def save_to_txt(infolist, path):
          fw = open(path, 'w+', encoding='utf-8')
          j = 0
          for page in infolist:
              #fw.write('第' + str(j + 1) + '页\n')
              commentall = page
              for i in range(0, len(commentall)):
                  fw.write(commentall[i] + '\n')
              j += 1
          fw.close()
       
       
      def main():
          infolist = []
          vid = '7579013546';
          cid = "0";
          page_num =3000
          url = 'https://video.coral.qq.com/varticle/' + vid + '/comment/v2'
          #print(url)
       
          for i in range(page_num):
              params = {'orinum': '10', 'cursor': cid}
              html = get_html(url, params)
              cid = parse_page(infolist, html)
       
       
          print_comment_list(infolist)
          save_to_txt(infolist, 'time.txt')
       
       
      main()

      二.数据处理部分


      1.评论的时间戳转换为正常时间 time.py

      # coding=gbk
      import csv
      import time
       
      csvFile = open("data.csv",'w',newline='',encoding='utf-8')
      writer = csv.writer(csvFile)
      csvRow = []
      #print(csvRow)
      f = open("time.txt",'r',encoding='utf-8')
      for line in f:
          csvRow = int(line)
          #print(csvRow)
       
          timeArray = time.localtime(csvRow)
          csvRow = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
          print(csvRow)
          csvRow = csvRow.split()
          writer.writerow(csvRow)
       
      f.close()
      csvFile.close()

      2.评论内容读入csv  CD.py

      # coding=gbk
      import csv
      csvFile = open("content.csv",'w',newline='',encoding='utf-8')
      writer = csv.writer(csvFile)
      csvRow = []
       
      f = open("content.txt",'r',encoding='utf-8')
      for line in f:
          csvRow = line.split()
          writer.writerow(csvRow)
       
      f.close()
      csvFile.close()

      3.统计一天各个时间段内的评论数 py.py

      # coding=gbk
      import csv
       
      from pyecharts import options as opts
      from sympy.combinatorics import Subset
      from wordcloud import WordCloud
       
      with open('../Spiders/data.csv') as csvfile:
          reader = csv.reader(csvfile)
       
          data1 = [str(row[1])[0:2] for row in reader]
       
          print(data1)
      print(type(data1))
       
       
      #先变成集合得到seq中的所有元素,避免重复遍历
      set_seq = set(data1)
      rst = []
      for item in set_seq:
          rst.append((item,data1.count(item)))  #添加元素及出现个数
      rst.sort()
      print(type(rst))
      print(rst)
       
      with open("time2.csv", "w+", newline='', encoding='utf-8') as f:
          writer = csv.writer(f, delimiter=',')
          for i in rst:                # 对于每一行的,将这一行的每个元素分别写在对应的列中
              writer.writerow(i)
       
      with open('time2.csv') as csvfile:
           reader = csv.reader(csvfile)
           x = [str(row[0]) for row in reader]
           print(x)
      with open('time2.csv') as csvfile:
          reader = csv.reader(csvfile)
          y1 = [float(row[1]) for row in reader]
          print(y1)

      4.统计最近评论数 py1.py

      # coding=gbk
      import csv
       
      from pyecharts import options as opts
      from sympy.combinatorics import Subset
      from wordcloud import WordCloud
       
      with open('../Spiders/data.csv') as csvfile:
          reader = csv.reader(csvfile)
       
          data1 = [str(row[0]) for row in reader]
          #print(data1)
      print(type(data1))
       
       
      #先变成集合得到seq中的所有元素,避免重复遍历
      set_seq = set(data1)
      rst = []
      for item in set_seq:
          rst.append((item,data1.count(item)))  #添加元素及出现个数
      rst.sort()
      print(type(rst))
      print(rst)
       
       
       
      with open("time1.csv", "w+", newline='', encoding='utf-8') as f:
          writer = csv.writer(f, delimiter=',')
          for i in rst:                # 对于每一行的,将这一行的每个元素分别写在对应的列中
              writer.writerow(i)
       
      with open('time1.csv') as csvfile:
           reader = csv.reader(csvfile)
           x = [str(row[0]) for row in reader]
           print(x)
      with open('time1.csv') as csvfile:
          reader = csv.reader(csvfile)
          y1 = [float(row[1]) for row in reader]
       
          print(y1)

      三. 数据分析数据分析方面:涉及到了词云图,条形,折线,饼图,后三者是对评论时间与主演占比的分析,然而腾讯的评论时间是以时间戳的形式显示,所以要进行转换,再去统计出现次数,最后,新加了对评论内容的情感分析。

      结论:

      用Python爬取了《开端》3w+评论数据,并将其可视化分析后,终于知道它为什么这么火了

       本文转自公众号志斌的python笔记 ,如有侵权请联系删除!

      你需要登录,才能进行发帖操作
    • 单栏布局 帖子间隔 侧栏位置: