| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
在试图爬腾讯视频的时候遇到一个不理解的地方。 
我现在代码可以根据需求爬到了想要的视频,以及相应的集数的播放页面了。 
接下来我试图写将视频下载下来的代码块。 
 
在网页抓包中很容易就能发现视频资源包。 
 
 
 
然后分析资源包的url 
- 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 是不变的(起码在当前视频下是不变的) 
- 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顺序变化: 
 
 
        问题请教1:x位置应该是资源包的顺序吧?在爬取视频的时候需要考虑这个吗?(我的意思是:假设网页了一个视频用10个资源包来加载,x位置是01-010。而我在爬取的时候设定单个资源包比网页上大一倍,那我url的x位置子需要01-05也可以? 
                :y位置有是资源包占视频10分之几吗?是不是前多少个资源包用1,前多少个资源用2,然后依次类推? 
        问题请教2:针对这里该怎么使用代码循环改变资源包的url,去下载视频呢? 
- url2=0273_o0035ihmvnu.321002.9.ts?
 
  复制代码 
url3 是参数 
- index: 288
 
 - start: 2900520
 
 - end: 2911914
 
 - brs: 48955200
 
 - bre: 49262203
 
 - ver: 4
 
 - token: 6de057df89f3c59c40381c8c9f409170
 
  复制代码 
问题请教3:这些参数中其它的都是有规律,唯独"token"这个参数,我看了几个包都是个不相同,而且也是没有规律。这该怎么应对? 
 
针对上面的,该怎么去使用代码获取到视频资源的url,总不能手动去把所有资源包的url复制下来吧。 
 
还有,url1上面说了在单个视频里是不变的,但是在不同的视频资源里,它却是变化的,我没找到像b站里视频的 
比如下面这url-a是另一视频的资源url的第一段,和前面沙海视频的第一段放一起对比 
- url-a=https://apd-39d98a0b3f26c8a12b2ccc53e6269f0f.v.smtcdns.com/omts.tc.qq.com/AU_Tk9QHW5FknkloB4mbac2hEjFHE6IEoDIcwWQLynnc/uwMROfz2r5zAoaQXGdGnCmdf646YsKpvYbT1SnTPDDjQJcI2/5atEMAgDZgvZm4JYvWb6gElhbo3UEdbAwraHE2nXYWVPp0Uc4XfL_QkHiOj47nTcJZLHvQk-MNfffVmGkK9Dlca5nA06F4LPUKp9t_SW6MPdLiSmPcvoGpqt9PEKVLpSOhNAIYnRb-TsTe5AXe-hnKOFpCae8o_h7Ty__yCzve5QxGoaFl9v_Q/
 
  复制代码- url1 =https://apd-
 
 - 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,但是还做不到下载 
- import requests
 
 - from lxml import etree
 
 - from selenium import webdriver
 
 - from selenium.webdriver.common.by import By
 
 - from fake_useragent import UserAgent
 
 - from urllib import parse
 
 - import re
 
  
- class tencent_movie (object):
 
 -     def __init__(self):
 
 -         ua = UserAgent(verify_ssl=False)
 
  
-         for i in range(1,2):
 
 -             self.headers = {'User-Agent':ua.random}
 
 -     def get_html(self,url):
 
 -         res = self.s.get(url,headers=self.headers)
 
 -         html = res.content.decode('utf-8')
 
 -         return html
 
 -     def parse_html(self,html):
 
 -         target = etree.HTML(html)
 
 -         links = target.xpath('//h2[@class="result_title"]/a/@href')
 
 -         host = links[0]
 
 -         res = self.s.get(host,headers=self.headers)
 
 -         con = res.content.decode('utf-8')
 
 -         new_html = etree.HTML(con)
 
 -         # first_select = int(input('1.电视剧\n2.电影\n'))
 
 -         first_select = 1
 
 -         #腾讯视频的链接里page和cover似乎是来回变化的,还没找出规律了,需自行判断使用
 
 -         # pattern = re.compile('https://v.qq.com/x/page/(.*?).html')
 
 -         pattern = re.compile('https://v.qq.com/x/cover/(.*?).html')
 
 -         id = pattern.findall(host)[0]
 
 -         if first_select == 1:
 
 -             #获取电视剧集链接
 
 -             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)
 
 -             r = self.s.get(url=url_link).json()
 
 -             data = r['data']['normalList']['itemList'][0]['videoInfo']['firstBlockSites'][0]['episodeInfoList']
 
 -             print('共%s集'%len(data),end='')
 
 -             no = input('需要哪一集')
 
 -             last_host = data[(int(no)-1)]['url']
 
 -         else:
 
 -             # 电影是直接可以得到链接地址
 
 -             last_host =  host
 
 -         self.driver = webdriver.Edge()
 
 -         self.driver.get(last_host)
 
  
-     def get_video(self):
 
 -         self.url_video = 'https://ltsbsy.qq.com/uwMROfz2r5zAoaQXGdGnC2df644E7D3uP8M8pmtgwsRK9nEL/APNWyrM1F_pecJ6dAJ1tUU7HzM81evSrTWGFUHBzMMqC2DylqoI8Nup-QK-9qKUk-4iQRdRRmUQKwQv6ZSe3D3jMh-mUrsvGwyhSfIQ1cEkKONR3AwcHEYvHCelsMEPK7laySYNBHz5DtEY9Vvc9Vg-XIq-4cplothhBidddUyBRXAxNTw8uQg/'
 
  
-     def main(self):
 
 -         # name = input('请输入电视局名或电影名:')
 
 -         name = '沙海'
 
 -         query  = {'q':name}
 
 -         name_link = parse.urlencode(query)
 
 -         url = 'https://v.qq.com/x/search/?{}&stag=0&smartbox_ab='.format(name_link)
 
 -         self.s = requests.session()
 
 -         html = self.get_html(url)
 
 -         self.parse_html(html)
 
 - if __name__ == '__main__':
 
 -     spider=tencent_movie()
 
 -     spider.main()
 
  
 
 
  复制代码 |   
 
 
 
 |