NiceLeeのBlog 用爱发电 bilibili~

Java 爬虫练习-bilibili视频下载 (二)

2019-01-23
nIceLee

阅读:


之前移动Web访问得到的哔哩哔哩链接视频清晰度不是很好,这个需要改进。
本文记录做过的思考与尝试。

思路

还是回到PC端,看看有什么办法可想。
前面的问题是m4s文件不知道怎么处理,能不能换种格式,比如.flv。因为B站有两种在线播放方式,一种h5播放器,一种flash播放器。
sources/archive/2019/01/h5-flash.png
切换播放器后,在查看一下,果然有:
sources/archive/2019/01/flv-header.png
重试一下,看看能不能下载(右键,Open in New Tab),发现可以:
sources/archive/2019/01/flv-open-in-new-tab.png
那么记录此时的请求头部Headers,然后在网页源代码里找找,看看有木有链接,恰好又找到了:
sources/archive/2019/01/flv-resource.png
那么,此时只待具体实现了!!!

实现步骤整理

目前已经知道了实现思路可行,现在整理下如何实现,假设av号已知:

  1. 人工访问https://www.bilibili.com/video/av52738/,记录headers1的构成格式
  2. 人工筛选链接关键词.flv,从后台筛选出我们需要的链接,记录headers2的构成格式
  3. 模拟访问页面https://www.bilibili.com/video/av52738/,提取出FLV下载链接(仿headers1
  4. 根据提取的FLV下载链接,下载FLV视频(仿headers2

关键代码

关键是头部需要告诉服务器,我使用Flash播放器,从PC端访问,这个请求是从播放页面打开的。

/**
 * 该Header配置用于视频下载
 */
public HashMap<String, String> getBiliWwwHeaders(String avId) {
    headerMap.put("X-Requested-With", "ShockwaveFlash/28.0.0.137");
    headerMap.put("Referer", "https://www.bilibili.com/video/" + avId);//need addavId
    headerMap.put("User-Agent",
            "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0");
    return headerMap;
}

源代码


内容
隐藏