zoukankan      html  css  js  c++  java
  • 每天B站的热门视频都是哪些?爬取B站热门视频

    本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

     

    这篇文章主要介绍了Python如何爬取b站热门视频并导入Excel,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

     

    代码如下

    import requests
    from lxml import etree
    import xlwt
    import os
    
    # 爬取b站热门视频信息
    def spider():
      video_list = []
      url = "https://www.bilibili.com/ranking?spm_id_from=333.851.b_7072696d61727950616765546162.3"
      html = requests.get(url, headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"}).text
      html = etree.HTML(html)
      infolist = html.xpath("//li[@class='rank-item']")
      for item in infolist:
        rank = "".join(item.xpath("./div[@class='num']/text()"))
        video_link = "".join(item.xpath(".//div[@class='info']/a/@href"))
        title = "".join(item.xpath(".//div[@class='info']/a/text()"))
        payinfo = "".join(item.xpath(".//div[@class='detail']/span/text()")).split("")
        play = payinfo[0] + ""
        comment = payinfo[1]
        if comment.isdigit() == False:
          comment += ""
        upname = "".join(item.xpath(".//div[@class='detail']/a/span/text()"))
        uplink = "http://" + "".join(item.xpath(".//div[@class='detail']/a/@href"))
        hot = "".join(item.xpath(".//div[@class='pts']/div/text()"))
        video_list.append({
          'rank': rank,
          'videolink': video_link,
          'title': title,
          'play': play,
          'comment': comment,
          'upname': upname,
          'uplink': uplink,
          'hot': hot
        })
      return video_list
    
    
    def write_Excel():
      # 将爬取的信息添加到Excel
      video_list = spider()
      workbook = xlwt.Workbook() # 定义表格
      sheet = workbook.add_sheet("b站热门视频")  # 添加sheet的name
      xstyle = xlwt.XFStyle()  # 实例化表格样式对象
      xstyle.alignment.horz = 0x02 # 字体居中
      xstyle.alignment.vert = 0x01
      head = ['视频名', 'up主','排名', '热度','播放量','评论数']
      for h in range(len(head)):
        sheet.write(0, h, head[h], xstyle)
      i = 1
      for item in video_list:
        # 向单元格(视频名)添加该视频的超链接
        if '"' in item["title"]:
          item["title"] = item["title"].split('"')[1]
        title_data = 'HYPERLINK("'+item["videolink"]+'";"'+item["title"]+'")'  # 设置超链接
        sheet.col(0).width = int(256 * len(title_data) * 3/5)  # 设置列宽
        sheet.write(i, 0, xlwt.Formula(title_data), xstyle)
        name_data = 'HYPERLINK("'+item["uplink"]+'";"'+item["upname"]+'")'
        sheet.col(1).width = int(256 * len(name_data) * 3/5)
        sheet.write(i, 1, xlwt.Formula(name_data), xstyle)
        sheet.write(i, 2, item["rank"], xstyle)
        sheet.write(i, 3, item["hot"], xstyle)
        sheet.write(i, 4, item["play"], xstyle)
        sheet.write(i, 5, item["comment"], xstyle)
        i += 1
      # 如果文件存在,则将其删除
      file = "b站热门视频信息.xls"
      if os.path.exists(file):
        os.remove(file)
      workbook.save(file)
    
    if __name__ == '__main__':
      write_Excel()

    结果展示:

  • 相关阅读:
    C#小常识集锦(一)《更锋利的CSharp代码》读书笔记
    QueryBuilder 优雅的Linq To SQL动态查询(转)
    了解 NoSQL 的必读资料
    微软报表
    linq to sql 中,如何解决多条件查询问题,答案,用表达式树! (下)
    LINQ体验(17)——LINQ to SQL语句之动态查询
    细数那些运行在微软平台上的NoSQL数据库
    5道经典的程序题
    打造自己的LINQ Provider(中):IQueryable和IQueryProvider (转 李会军)
    Expression Examples :Report Builder
  • 原文地址:https://www.cnblogs.com/hhh188764/p/13830958.html
Copyright © 2011-2022 走看看