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读写excel的方法
Nov 18 Python
python中实现php的var_dump函数功能
Jan 21 Python
详解Python中for循环的使用方法
May 14 Python
Python编程中的文件读写及相关的文件对象方法讲解
Jan 19 Python
[原创]python爬虫(入门教程、视频教程)
Jan 08 Python
Python实现批量压缩图片
Jan 25 Python
分析python动态规划的递归、非递归实现
Mar 04 Python
利用python求积分的实例
Jul 03 Python
对python 树状嵌套结构的实现思路详解
Aug 09 Python
Django DRF认证组件流程实现原理详解
Aug 17 Python
python opencv通过4坐标剪裁图片
Jun 05 Python
python如何查找列表中元素的位置
May 30 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
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
joomla jce editor 解决上传中文名文件失败问题
2013/06/09 PHP
smarty模板中拼接字符串的方法
2014/02/14 PHP
php检查日期函数checkdate用法实例
2015/03/19 PHP
PHP中Closure类的使用方法及详解
2015/10/09 PHP
jQuery弹出层插件简化版代码下载
2008/10/16 Javascript
setTimeout 不断吐食CPU的问题分析
2009/04/01 Javascript
远离JS灾难css灾难之 js私有函数和css选择器作为容器
2011/12/11 Javascript
Js四则运算函数代码
2012/07/21 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
JQuery性能优化的几点建议
2014/05/14 Javascript
JavaScript常用验证函数实例汇总
2014/11/25 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
2017/01/19 Javascript
Vue.js学习示例分享
2017/02/05 Javascript
快速将Vue项目升级到webpack3的方法步骤
2017/09/14 Javascript
Angular 向组件传递模板的两种方法
2018/02/23 Javascript
VUE Error: getaddrinfo ENOTFOUND localhost
2018/05/03 Javascript
a标签调用js的方法总结
2019/09/05 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
2020/12/09 Javascript
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
[02:44]重置世界,颠覆未来——DOTA2 7.23版本震撼上线
2019/12/01 DOTA
python安装numpy和pandas的方法步骤
2019/05/27 Python
Python爬虫之Selenium下拉框处理的实现
2020/12/04 Python
全球最大的在线橄榄球商店:Lovell Rugby
2018/05/20 全球购物
美国新娘礼品店:The Paisley Box
2020/09/08 全球购物
Java文件和目录(IO)操作
2014/08/26 面试题
农民工工资发放承诺书
2014/03/31 职场文书
超市活动计划书
2014/04/24 职场文书
解除劳动合同协议书范本2014
2014/09/25 职场文书
教师工作决心书
2015/02/04 职场文书
幼儿园中秋节活动总结
2015/03/23 职场文书
学校捐书倡议书
2015/04/27 职场文书
会议简报格式范文
2015/07/20 职场文书
MySQL Router实现MySQL的读写分离的方法
2021/05/27 MySQL
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android
nginx配置虚拟主机的详细步骤
2021/07/21 Servers