当前位置:   article > 正文

哔哩哔哩-B站视频爬取-python爬虫_b站转url

b站转url
  • 由于b站的反爬机制将视频分为了音频数据和无声的视频数据,所以需要用ffmpeg合成后才能得到我们想要的视频。
  • ffmpeg需要安装并配置变量环境后才能使用。
  • 本代码主要使用正则表达式来实现。
  • 需自行install部分导包。

部分代码讲解:

url = 'https://www.bilibili.com/video/BV1L841137ST/''
运行

 进入目标网页后,我们只需提取?前的url

  1. headers = {
  2. 'Referer': 'https://www.bilibili.com/',
  3. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
  4. }
'
运行

Referer 防盗链:告诉服务器我们请求的url网址是从哪里跳转过来的

  1. response = requests.get(url=url, headers=headers)
  2. # print(response.text)
  3. title = re.findall('<h1 title="(.*?)"', response.text)[0]
  4. title = re.sub(r'[\/:*?"<>| ]', '', title)
  5. html_data = re.findall('<script>window.__playinfo__=(.*?)</script>', response.text)[0]
  6. print(title)
  7. json_data = json.loads(html_data)
  8. print(html_data)

其中 print(html_data) 后,可以使用json解析器来分析,分别提取出视频和音频数据:

用 ffmpeg 来合并视频和音频:

  1. cmd = f"ffmpeg -i {title}.mp4 -i {title}.mp3 -c:v copy -c:a aac -strict experimental {title}output.mp4"
  2. subprocess.run(cmd, shell=True)

最后将原本分别爬取出的无声视频和音频删去 :

  1. os.remove(f'{title}.mp4')
  2. os.remove(f'{title}.mp3')

运行代码后,会看到一堆红色的代码,不要慌,那不是报错,而是 ffmpeg 在运行时产生的数据:

最后,可以在该.py的同级目录下看到合并后的视频:

 

 完整代码:

  1. import requests
  2. import re
  3. import pprint
  4. import json
  5. import subprocess
  6. import os
  7. url = 'https://www.bilibili.com/video/BV1L841137ST/'
  8. headers = {
  9. 'Referer': 'https://www.bilibili.com/',
  10. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
  11. }
  12. response = requests.get(url=url, headers=headers)
  13. # print(response.text)
  14. title = re.findall('<h1 title="(.*?)"', response.text)[0]
  15. title = re.sub(r'[\/:*?"<>| ]', '', title)
  16. html_data = re.findall('<script>window.__playinfo__=(.*?)</script>', response.text)[0]
  17. print(title)
  18. json_data = json.loads(html_data)
  19. # print(html_data)
  20. # print(type(json_data))
  21. video_url = json_data['data']['dash']['video'][0]['baseUrl']
  22. audio_url = json_data['data']['dash']['audio'][0]['baseUrl']
  23. # print(video_url)
  24. # print(audio_url)
  25. video_content = requests.get(url=video_url, headers=headers).content
  26. audio_content = requests.get(url=audio_url, headers=headers).content
  27. with open(title + '.mp4', mode='wb') as f:
  28. f.write(video_content)
  29. with open(title + '.mp3', mode='wb') as f:
  30. f.write(audio_content)
  31. print(title, '数据保存成功')
  32. cmd = f"ffmpeg -i {title}.mp4 -i {title}.mp3 -c:v copy -c:a aac -strict experimental {title}output.mp4"
  33. subprocess.run(cmd, shell=True)
  34. os.remove(f'{title}.mp4')
  35. os.remove(f'{title}.mp3')
  36. print(title, '视频合成完成')
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/900040
推荐阅读
相关标签
  

闽ICP备14008679号