Python如何爬取b站热门视频并导入Excel


Posted in Python onAugust 10, 2020

代码如下

#encoding:utf-8
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()

结果展示:

Python如何爬取b站热门视频并导入Excel

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
跟老齐学Python之集合(set)
Sep 24 Python
Python模拟登录12306的方法
Dec 30 Python
在Python中使用next()方法操作文件的教程
May 24 Python
python 编写简单网页服务器的实例
Jun 01 Python
Python爬虫实战之12306抢票开源
Jan 24 Python
在python中做正态性检验示例
Dec 09 Python
Python面向对象之继承原理与用法案例分析
Dec 31 Python
Python使用QQ邮箱发送邮件实例与QQ邮箱设置详解
Feb 18 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
Mar 23 Python
pytorch查看模型weight与grad方式
Jun 24 Python
Python:__eq__和__str__函数的使用示例
Sep 26 Python
django中websocket的具体使用
Jan 22 Python
拿来就用!Python批量合并PDF的示例代码
Aug 10 #Python
Python 发送邮件方法总结
Aug 10 #Python
Python getattr()函数使用方法代码实例
Aug 10 #Python
Python matplotlib模块及柱状图用法解析
Aug 10 #Python
Python如何操作docker redis过程解析
Aug 10 #Python
基于Python实现下载网易音乐代码实例
Aug 10 #Python
Python grequests模块使用场景及代码实例
Aug 10 #Python
You might like
新的一年,新的期待:DC在2020年的四部动画电影
2020/01/01 欧美动漫
PHP中source #N问题的解决方法
2014/01/27 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
2014/06/19 PHP
PHP7修改的函数
2021/03/09 PHP
利用js 进行输入框自动匹配字符的小例子
2013/06/29 Javascript
JavaScript引用类型和基本类型详解
2016/01/06 Javascript
深入浅析JS是按值传递还是按引用传递(推荐)
2016/09/18 Javascript
解决前端跨域问题方案汇总
2016/11/20 Javascript
JS经典正则表达式笔试题汇总
2016/12/15 Javascript
JavaScript html5利用FileReader实现上传功能
2020/03/27 Javascript
Angular.js基础学习之初始化
2017/03/10 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
React-Native中禁用Navigator手势返回的示例代码
2017/09/09 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
three.js实现圆柱体
2018/12/30 Javascript
微信小程序动态显示项目倒计时
2019/06/20 Javascript
[02:21]DOTA2英雄基础教程 蝙蝠骑士
2013/12/16 DOTA
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
c++生成dll使用python调用dll的方法
2014/01/20 Python
利用Python的Django框架生成PDF文件的教程
2015/07/22 Python
关于python的list相关知识(推荐)
2017/08/30 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
python实现把二维列表变为一维列表的方法分析
2019/10/08 Python
Python3实现配置文件差异对比脚本
2019/11/18 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
ASP.NET中的身份验证有那些
2012/07/13 面试题
一名女生的自荐信
2013/12/08 职场文书
研修心得体会
2014/09/04 职场文书
大学生读书笔记范文
2015/07/01 职场文书
2015年环境监察工作总结
2015/07/23 职场文书
2016年党员创先争优承诺书
2016/03/25 职场文书
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
2022/04/13 Java/Android
Java 使用类型为Object的变量指向任意类型的对象
2022/04/13 Java/Android
MySQL普通表如何转换成分区表
2022/05/30 MySQL
maven 解包依赖项中的文件的解决方法
2022/07/15 Java/Android