python3爬虫与GUI:爬取腾讯视频

最近想研究一下用python爬虫爬一些经常看的视频网站,其中包括有腾讯视频、YouTube、Twitter。本文从腾讯开始,之后会慢慢的更新其他两个的。

腾讯视频我之前就有过尝试,结果都失败了(我的目标是直接爬取完整视频!实际上这视频分析来分析去都是分段来的..)花了不少时间,结果还是停留在了只能爬取分段视频的阶段..下面也来简单说说如何爬取一些分段片段!

爬取视频片段分析

在我们经过抓包的过程中可发现一些有用的信息,比如getinfogetkey的数据包。下面简单分析一下,实际上只用到getinfo数据包的内容即可!

为了简便直接放出相关的链接:

getinfo:http://vv.video.qq.com/getinfo?vids={}&platform=101001&charge=0&otype=xml

getkey:http://vv.video.qq.com/getkey?otype=json&platform=11&format={}&vid={}&filename={}&appver=3.2.19.333

再强调一下,实际上仅仅分析getinfo的相关的内容即可得出片段视频!

随便以一个腾讯视频的链接来进行以下图片的简单说明,针对以上的相关的参数:

即:
http://vv.video.qq.com/getinfo?vids=a00260ipkjg&platform=101001&charge=0&otype=xml

视频的真实地址仅仅需要fn(filename)fvkey(key)URL(ui~url)这些参数即可。以下图将一一进行标出!

之后将得出一片段的真实地址:
http://218.8.55.13/vlive.qqvideo.tc.qq.com/AU8SqeoXTl1JLXdNhOFSXiMVi2va5Pws1sz4YXZ7sAxo/d002684wnon.m1.mp4?vkey=BCCD552375F7D76708838E84668FDE0E15051F1BE9FF349A31FE6CA14BDC8EAE35FEF2322A8FAEA590EB2FCB129B0C96595BB896DBB756581A9F307ADA7D259AD4371F820D6C25194FD296D3570997912221A33D6678597050700BA156442AB5CB137D70537A706F

只有几分钟..

如上..

研究来研究去,花费了不少的时间了,再研究下去也感觉没有多大的收获了..加上感觉也难以进行下去了,所以我决定:先暂停研究,用已有的工具来满足一下~。当然也离不开用python来模拟爬取了,哈哈~

分析模拟结合网站工具来下载完整视频

经过我的研究,腾讯视频那都是一个一个片段的来进行“输出”的,所以一个一个进行爬取之后(利用网站工具),再利用python的一些模块进行合并,即可获得视频的完整版。当然这些过程均将用python来进行模拟!

打开此网站,输入刚刚的要下载的视频链接,点击获取视频之后会跳到另一个页面,会发现完整版的视频就是用几个片段分成的:

腾讯这个老狗..

如上我们已得知所有相关的片段的真实地址了,接下来将它们都下载下来后合并即可得到一个完整的视频了,网速快的话实际上跟直接下载一个完整版的视频没什么两样,可能还要快,哈哈~

至此,就都已经分析完了,只剩下代码的事了。

代码实现

先说一下,这样的代码我写过太多次了..有点腻了…写不下去了,感觉总是在做一些重复的事,我就不打算写太多了,大概说一下思路吧,将各个片段下载来之后,再利用一个python处理视频的模块库将择好几个片段一同进行连接即可完成了。但是,貌似今天我看到好像没有分片段了?好像直接可以爬到完整版了?难道是错觉?算了,反正我也不怎么下载腾讯视频..哈哈~

核心代码,剩下的代码可参考我的其他博文,自己写吧,腻死了..这段代码已经达到能够爬取到所有分片段了..

`
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
'''
Created on 2018年7月24日
@author: junjieliu
'''
"""
函数目标:结合pyQT5界面化爬取腾讯视频
编写时间:2018-7.24
"""
import time
import requests
import sys
import re
from PyQt5.QtCore import QCoreApplication
from PyQt5.QtWidgets import (QPushButton, QWidget, QLineEdit, QTextEdit, QGridLayout, QApplication, QComboBox)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from urllib.parse import quote
from pyquery import PyQuery as pq
browser = webdriver.Chrome('/Users/junjieliu/Documents/webdirver小插件/chromedriver')
# 设置显示等待,超过时间返回失败,否则就地正法!
wait = WebDriverWait(browser, 40)
input_url = 'https://v.qq.com/x/cover/fzfi0p4etjrckhh/a00260ipkjg.html'
url = 'http://www.weibodang.cn/dang.php'
browser.get(url)
input = wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR, '#aform > div > div > div > input')))
button = wait.until(
EC.element_to_be_clickable((By.CSS_SELECTOR, '#aform > div > div > div > span > input')))
# button = browser.find_element_by_name('check')
input.clear()
input.send_keys(input_url)
button.click()
html = browser.page_source
# 直接爬取相关的内容,即播放地址,再进行一番清洗得到正确的地址
referer = re.findall(r'<video src="(.*?)"', html, re.S)
for_name = re.match(r'视频如下可直接播放,.*?:"(.*?)"', html, re.S)
print(for_name)
for each in referer:
results = each.replace(';', '&')
print(results)
`

对了,GUI用的pyQT5在我之前的博文也有介绍了,不说了..我承认我有点懶~

参考&最后

一些在学习过程中用处较大的放上来了,比较懶..当然也感谢其他那些无私奉献的人们,我也从中学习到了不少的东西,谢谢~

1、https://blog.csdn.net/cplvfx/article/details/80080761

其中用到的一些模块不懂的还需自行去了解以及查找!

更新

如今在爬取片段的那个方法可以直接爬取到腾讯以前的旧的完整的视频了,好像没有什么分片段了…方法过程如上!新的视频但是还待解决。

---------------本文终---------------

文章作者:刘俊

最后更新:2019年01月02日 - 14:01

许可协议: 转载请保留原文链接及作者。