爬取思路
- 使用selenium打开页面
- 输入需要解析的VIP视频URL
- 主动触发点击事件
- 切换iframe到找到video标签的src属性值
- 根据URL下载
源代码
源码目前只爬取到下载的URL,下载将会在后面补上
from selenium import webdriver
class TencentVideo(object):
"""腾讯视频爬虫"""
"""初始化方法,传入腾讯视频待解析的的url"""
def __init__(self, parse_web_type, parse_web_url, video_url):
driver = webdriver.Chrome()
# 使用驱动获取一个解析网址
driver.get(parse_web_url)
print("打开成功")
# 如果解析类型是wpsseo, 按照http://www.wpsseo.cn/进行VIP解析
if "wpsseo".__eq__(parse_web_type):
# 1、获取输入框的值,并发送数据
driver.find_element(by="id", value="url").send_keys(video_url)
print("输入url成功:%s" % video_url)
# 2、点击开始解析
driver.find_element(by="id", value="bf").click()
print("点击解析成功")
# 3、根据不同的解析网站嵌套的iframe可能不一样
iframe = driver.find_element(by="id", value="player")
print("获取iframe成功")
driver.switch_to.frame(iframe)
print("切换到iframe成功")
# 这里的第一个WANG的标签很重要,里面嵌套的内容有动态变化,可能是内嵌的访问腾讯的视频 也可能是中间网站的地址
iframe_wang = driver.find_element(by="id", value="WANG")
driver.switch_to.frame(iframe_wang)
print("切换到WANG的iframe成功")
try:
# 3.1、套娃了一个iframe
iframe_no = driver.find_element(by="tag name", value="iframe")
driver.switch_to.frame(iframe_no)
# 3.2、iframe 里面又套娃了一个iframe
WANG_2 = driver.find_element(by="id", value="WANG")
driver.switch_to.frame(WANG_2)
print("切换到WANG的iframe的myiframe成功----从解析网站获取")
try:
# 3.3、没有套娃了,直接通过video标签名称获取
video_src = driver.find_element(by="id", value="video").find_element(by="tag name", value="video").get_attribute("src")
print("获取链接成功:%s" % video_src)
except:
# 3.4、套娃里面还是套娃,又嵌套可一层iframe
myiframe = driver.find_element(by="id", value="myiframe")
driver.switch_to.frame(myiframe)
try:
# 3.4、最深处终于找到了video标签
video_src = driver.find_element(by="tag name", value="video").get_attribute("src")
print("获取链接成功:%s" % video_src)
except:
print("获取失败")
except:
try:
# 判断这里的video标签时在div上还是在video上,
video_tag = driver.find_element(by="id", value="video")
if video_tag.tag_name == "video":
# 3.5、直接字video上的话 src属性加了blob前缀,需要解析改格式才能下载
video_src = video_tag.get_attribute("src")
# blood开头的
print("获取链接成功:%s" % video_src)
else:
# 3.6、 非常重要, 多次执行后总会有一次走到这里
# 这里直接走的是腾讯视频的接口,如果研究一下改接口 应该也是大有收获
video_src = video_tag.find_element(by="tag name", value="video").get_attribute("src")
print("获取链接成功:%s" % video_src)
except:
print("下载失败")
driver.close()
driver.quit()
if __name__ == '__main__':
tv = TencentVideo("wpsseo", "http://www.wpsseo.cn/", "https://v.qq.com/x/cover/m441e3rjq9kwpsc/l0043ly8ohx.html")
关键爬取截图
blob格式
最深套娃
视频截图
此方法仅供学习,望大家看在套娃这么多的份上,小星星来一个哇!