鱼C论坛

 找回密码
 立即注册
查看: 1484|回复: 1

爬虫,爬腾讯视频

[复制链接]
发表于 2021-12-1 16:13:19 | 显示全部楼层 |阅读模式
60鱼币
本帖最后由 非凡 于 2021-12-1 16:17 编辑

在试图爬腾讯视频的时候遇到一个不理解的地方。
我现在代码可以根据需求爬到了想要的视频,以及相应的集数的播放页面了。
接下来我试图写将视频下载下来的代码块。
  1. def get_video(self):
复制代码

在网页抓包中很容易就能发现视频资源包。
1.png

然后分析资源包的url
  1. https://apd-f88922ffb8c1e4447378b075158342a0.v.smtcdns.com/moviets.tc.qq.com/AZIAbKFV4zGniuAtP4owV3hlcy-bGRAHvff2YGHOx9y0/uwMROfz2r5zAoaQXGdGnCmdf646YsKpvYbT1SnTPDDjQJcI2/cuqdkySnRYgspmGeaIZ2nulkJVzs7wMc-VMFErT6Pp4g1s5lnLCSX4Tz1SdbhQchisVHX7Es0V8S7MdjEIad-UtFZX1lUFbnhcVA8Jf7hSWaY_THHuwUu-12WfeehjEahgzoB6e7_PjTY-XYenRG37P2HEndbQZh3EvIbvUazrt3LfZjBLlllQ/0273_o0035ihmvnu.321002.9.ts?index=273&start=2738400&end=2747800&brs=27129340&bre=28374275&ver=4&token=840cc746ae037d83a53aa5abe2f3309a
复制代码

可以分三部分:
url1 是不变的(起码在当前视频下是不变的)
  1. url1 =https://apd-f88922ffb8c1e4447378b075158342a0.v.smtcdns.com/moviets.tc.qq.com/AZIAbKFV4zGniuAtP4owV3hlcy-bGRAHvff2YGHOx9y0/uwMROfz2r5zAoaQXGdGnCmdf646YsKpvYbT1SnTPDDjQJcI2/cuqdkySnRYgspmGeaIZ2nulkJVzs7wMc-VMFErT6Pp4g1s5lnLCSX4Tz1SdbhQchisVHX7Es0V8S7MdjEIad-UtFZX1lUFbnhcVA8Jf7hSWaY_THHuwUu-12WfeehjEahgzoB6e7_PjTY-XYenRG37P2HEndbQZh3EvIbvUazrt3LfZjBLlllQ/
复制代码

url2 是0x_o0035ihmvnu.321002.y.ts中的x位置1起始顺序变化,y位置1-10顺序变化:
2.jpg
        问题请教1:x位置应该是资源包的顺序吧?在爬取视频的时候需要考虑这个吗?(我的意思是:假设网页了一个视频用10个资源包来加载,x位置是01-010。而我在爬取的时候设定单个资源包比网页上大一倍,那我url的x位置子需要01-05也可以?
                :y位置有是资源包占视频10分之几吗?是不是前多少个资源包用1,前多少个资源用2,然后依次类推?
        问题请教2:针对这里该怎么使用代码循环改变资源包的url,去下载视频呢?
  1. url2=0273_o0035ihmvnu.321002.9.ts?
复制代码

url3 是参数
  1. index: 288
  2. start: 2900520
  3. end: 2911914
  4. brs: 48955200
  5. bre: 49262203
  6. ver: 4
  7. token: 6de057df89f3c59c40381c8c9f409170
复制代码

问题请教3:这些参数中其它的都是有规律,唯独"token"这个参数,我看了几个包都是个不相同,而且也是没有规律。这该怎么应对?

针对上面的,该怎么去使用代码获取到视频资源的url,总不能手动去把所有资源包的url复制下来吧。

还有,url1上面说了在单个视频里是不变的,但是在不同的视频资源里,它却是变化的
比如下面这url-a是另一视频的资源url的第一段,和前面沙海视频的第一段放一起对比
  1. url-a=https://apd-39d98a0b3f26c8a12b2ccc53e6269f0f.v.smtcdns.com/omts.tc.qq.com/AU_Tk9QHW5FknkloB4mbac2hEjFHE6IEoDIcwWQLynnc/uwMROfz2r5zAoaQXGdGnCmdf646YsKpvYbT1SnTPDDjQJcI2/5atEMAgDZgvZm4JYvWb6gElhbo3UEdbAwraHE2nXYWVPp0Uc4XfL_QkHiOj47nTcJZLHvQk-MNfffVmGkK9Dlca5nA06F4LPUKp9t_SW6MPdLiSmPcvoGpqt9PEKVLpSOhNAIYnRb-TsTe5AXe-hnKOFpCae8o_h7Ty__yCzve5QxGoaFl9v_Q/
复制代码
  1. url1 =https://apd-
  2. f88922ffb8c1e4447378b075158342a0.v.smtcdns.com/moviets.tc.qq.com/AZIAbKFV4zGniuAtP4owV3hlcy-bGRAHvff2YGHOx9y0/uwMROfz2r5zAoaQXGdGnCmdf646YsKpvYbT1SnTPDDjQJcI2/cuqdkySnRYgspmGeaIZ2nulkJVzs7wMc-VMFErT6Pp4g1s5lnLCSX4Tz1SdbhQchisVHX7Es0V8S7MdjEIad-UtFZX1lUFbnhcVA8Jf7hSWaY_THHuwUu-12WfeehjEahgzoB6e7_PjTY-XYenRG37P2HEndbQZh3EvIbvUazrt3LfZjBLlllQ/
复制代码

问题请教4:这样url一样的段应该是如同b站视频的BV码一样吧,是视频的“身份id”?,那这个视频的“身份id”怎么获取?网页元素里搜到呢?

本人web前端的知识浅薄,请大佬不吝赐教。。。。。。。。。
下面是我未写完的代码,求大佬能指导下我上面那4个问题,或者帮忙我补全def get_video(self):段的代码
我希望代码能实现:
1、询问需要爬取的电影or电视剧名
2、如果是电视剧,需要爬取哪一集?
3、将该集电视剧或电影下载下来。
1、2、都实现了,代码能取得相应电影or电视剧集的页面url,但是还做不到下载
  1. import requests
  2. from lxml import etree
  3. from selenium import webdriver
  4. from selenium.webdriver.common.by import By
  5. from fake_useragent import UserAgent
  6. from urllib import parse
  7. import re

  8. class tencent_movie (object):
  9.     def __init__(self):
  10.         ua = UserAgent(verify_ssl=False)

  11.         for i in range(1,2):
  12.             self.headers = {'User-Agent':ua.random}
  13.     def get_html(self,url):
  14.         res = self.s.get(url,headers=self.headers)
  15.         html = res.content.decode('utf-8')
  16.         return html
  17.     def parse_html(self,html):
  18.         target = etree.HTML(html)
  19.         links = target.xpath('//h2[@class="result_title"]/a/@href')
  20.         host = links[0]
  21.         res = self.s.get(host,headers=self.headers)
  22.         con = res.content.decode('utf-8')
  23.         new_html = etree.HTML(con)
  24.         # first_select = int(input('1.电视剧\n2.电影\n'))
  25.         first_select = 1
  26.         #腾讯视频的链接里page和cover似乎是来回变化的,还没找出规律了,需自行判断使用
  27.         # pattern = re.compile('https://v.qq.com/x/page/(.*?).html')
  28.         pattern = re.compile('https://v.qq.com/x/cover/(.*?).html')
  29.         id = pattern.findall(host)[0]
  30.         if first_select == 1:
  31.             #获取电视剧集链接
  32.             url_link = 'https://pbaccess.video.qq.com/trpc.videosearch.search_cgi.http/load_playsource_list_info?pageNum=0&id={}&dataType=2&pageContext=need_async%3Dtrue&scene=2&platform=2&appId=10718&site=qq&vappid=34382579&vsecret=e496b057758aeb04b3a2d623c952a1c47e04ffb0a01e19cf&g_tk=&g_vstk=&g_actk='.format(id)
  33.             r = self.s.get(url=url_link).json()
  34.             data = r['data']['normalList']['itemList'][0]['videoInfo']['firstBlockSites'][0]['episodeInfoList']
  35.             print('共%s集'%len(data),end='')
  36.             no = input('需要哪一集')
  37.             last_host = data[(int(no)-1)]['url']
  38.         else:
  39.             # 电影是直接可以得到链接地址
  40.             last_host =  host
  41.         self.driver = webdriver.Edge()
  42.         self.driver.get(last_host)

  43.     def get_video(self):
  44.         self.url_video = 'https://ltsbsy.qq.com/uwMROfz2r5zAoaQXGdGnC2df644E7D3uP8M8pmtgwsRK9nEL/APNWyrM1F_pecJ6dAJ1tUU7HzM81evSrTWGFUHBzMMqC2DylqoI8Nup-QK-9qKUk-4iQRdRRmUQKwQv6ZSe3D3jMh-mUrsvGwyhSfIQ1cEkKONR3AwcHEYvHCelsMEPK7laySYNBHz5DtEY9Vvc9Vg-XIq-4cplothhBidddUyBRXAxNTw8uQg/'

  45.     def main(self):
  46.         # name = input('请输入电视局名或电影名:')
  47.         name = '沙海'
  48.         query  = {'q':name}
  49.         name_link = parse.urlencode(query)
  50.         url = 'https://v.qq.com/x/search/?{}&stag=0&smartbox_ab='.format(name_link)
  51.         self.s = requests.session()
  52.         html = self.get_html(url)
  53.         self.parse_html(html)
  54. if __name__ == '__main__':
  55.     spider=tencent_movie()
  56.     spider.main()



复制代码

1.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-6 21:45:49 | 显示全部楼层
温湿度 发表于 2021-12-5 20:18
**** 作者被禁止或删除 内容自动屏蔽 ****

????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 06:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表