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 相关文章推荐
pyqt和pyside开发图形化界面
Jan 22 Python
python控制台英汉汉英电子词典
Apr 23 Python
python使用PIL缩放网络图片并保存的方法
Apr 24 Python
Django跨域请求问题的解决方法示例
Jun 16 Python
Python实现压缩文件夹与解压缩zip文件的方法
Sep 01 Python
python Shapely使用指南详解
Feb 18 Python
Python Django view 两种return的实现方式
Mar 16 Python
Pandas读取csv时如何设置列名
Jun 02 Python
python使用Word2Vec进行情感分析解析
Jul 31 Python
python 还原梯度下降算法实现一维线性回归
Oct 22 Python
Python中X[:,0]和X[:,1]的用法
May 10 Python
Python操作CSV格式文件的方法大全
Jul 15 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
浅析PKI加密解密 OpenSSL
2013/07/01 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
JS支持带x身份证号码验证函数
2008/08/10 Javascript
JQuery 动画卷页 返回顶部 动画特效(兼容Chrome)
2010/02/15 Javascript
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
javascript获取所有同类checkbox选项(实例代码)
2013/11/07 Javascript
javascript获取url上某个参数的方法
2013/11/08 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
2014/01/13 Javascript
jQuery统计指定子元素数量的方法
2015/03/17 Javascript
jquery实现全屏滚动
2015/12/28 Javascript
基于javascript实现右下角浮动广告效果
2016/01/08 Javascript
浅谈jQuery hover(over, out)事件函数
2016/12/03 Javascript
JS实现仿PS的调色板效果完整实例
2016/12/21 Javascript
详解vuejs几种不同组件(页面)间传值的方式
2017/06/01 Javascript
在vue项目中安装使用Mint-UI的方法
2017/12/27 Javascript
Node.js Express安装与使用教程
2018/05/11 Javascript
详解Vue源码学习之callHook钩子函数
2018/07/25 Javascript
JS计算两个数组的交集、差集、并集、补集(多种实现方式)
2019/05/21 Javascript
vue-cli随机生成port源码的方法
2019/09/02 Javascript
[01:41]DOTA2超级联赛专访YYF 称一辈子难忘TI2
2013/05/28 DOTA
[38:54]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第一场 11.28
2020/12/01 DOTA
Python3实现连接SQLite数据库的方法
2014/08/23 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
Python 实现日志同时输出到屏幕和文件
2020/02/19 Python
TensorFlow2.0使用keras训练模型的实现
2021/02/20 Python
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
2013/03/25 HTML / CSS
英国第一豪华护肤品牌:Elemis
2017/10/12 全球购物
思想品德自我鉴定
2013/10/12 职场文书
采购求职信
2014/03/17 职场文书
新春寄语大全
2014/04/09 职场文书
社区文艺活动方案
2014/08/19 职场文书
党建工作整改措施
2014/10/28 职场文书
大学生奶茶店创业计划书
2019/06/25 职场文书
React 并发功能体验(前端的并发模式)
2021/07/01 Javascript