鱼C论坛

 找回密码
 立即注册
查看: 1526|回复: 9

[已解决]如何在一个动态网站种找到某一资源的包是哪个?

[复制链接]
发表于 2021-11-22 17:01:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在写爬虫的时候,在遇到动态网站的时候,总会在找这在一资源的包的时候花费很长的时间。

想请教下大神们有什么经验传授下小子,如何在动态网页里快速的找到一个资源的包。

比如:
        我现在想爬腾讯视频电视剧《沙海》,我现在想要先获取到这一电视剧所有集的url,以便供我选择。
微信图片编辑_20211122165834.jpg
        但是这选集这里的资源包我是找了好久没找到。

        有没有什么办法,或工具推荐吗?
最佳答案
2021-11-23 15:39:21
Screenshot 2021-11-23 150633.jpg
没有特别的技巧,就是筛选,重点看html和json。数据一般都在这里。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-22 21:10:35 | 显示全部楼层
让我猜猜你的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-23 10:41:00 | 显示全部楼层
应该是 ajax 请求的吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-23 14:40:38 | 显示全部楼层

还没写代码还没写全,只是还在就卡在找这电视剧集的资源时,卡主了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-23 14:42:07 | 显示全部楼层
本帖最后由 非凡 于 2021-11-23 14:43 编辑


电影的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. class tencent_movie (object):
  8.     def __init__(self):
  9.         ua = UserAgent(verify_ssl=False)
  10.         for i in range(1,2):
  11.             self.headers = {'User-Agent':ua.random}
  12.     def get_html(self,url):
  13.         res = requests.get(url,headers=self.headers)
  14.         html = res.content.decode('utf-8')
  15.         return html
  16.     def parse_html(self,html):
  17.         target = etree.HTML(html)
  18.         links = target.xpath('//h2[@class="result_title"]/a/@href')
  19.         host = links[0]
  20.         res = requests.get(host,headers=self.headers)
  21.         con = res.content.decode('utf-8')
  22.         new_html = etree.HTML(con)
  23.         first_select = int(input('1.电视剧\n2.电影\n'))
  24.         if first_select == 1:
  25.             #获取电视剧集链接
  26.             new_links = new_html.xpath('//div[@class="mod_episode"]/span/a/@href')
  27.             print(len(new_links))
  28.             select = int(input('需要哪一集:'))
  29.             new_link = new_links[select -1]
  30.             last_host = 'https://api.akmov.net/?url='+new_link
  31.         else:
  32.             # 电影是直接可以得到链接地址
  33.             last_host =  host  
  34.         self.driver = webdriver.Edge()
  35.         self.driver.get(last_host)

  36.     def main(self):
  37.         name = input('请输入电视局名或电影名:')
  38.         query  = {'wd':name}
  39.         name_link = parse.urlencode(query)
  40.         url = 'https://v.qq.com/x/search/?q={}&stag=0&smartbox_ab='.format(name_link)
  41.         html = self.get_html(url)
  42.         self.parse_html(html)
  43. if __name__ == '__main__':
  44.     spider=tencent_movie()
  45.     spider.main()

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-23 15:39:21 | 显示全部楼层    本楼为最佳答案   
Screenshot 2021-11-23 150633.jpg
没有特别的技巧,就是筛选,重点看html和json。数据一般都在这里。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-23 18:17:50 | 显示全部楼层
suchocolate 发表于 2021-11-23 15:39
没有特别的技巧,就是筛选,重点看html和json。数据一般都在这里。

感谢指教,我找到这包了。
但现在我产生个新疑惑了,图片上是两个不同电视剧的剧集资源的包,但我看他包里的标头,竟然全都是一模一样的,这是什么原因啊?
请求url一样,path一样,啥都是一样的,那我根据什么去获取不同电视剧的剧集资源呢?
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-23 20:13:20 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-23 20:57:32 | 显示全部楼层
非凡 发表于 2021-11-23 18:17
感谢指教,我找到这包了。
但现在我产生个新疑惑了,图片上是两个不同电视剧的剧集资源的包,但我看他包 ...

看请求的带的data
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-25 14:39:43 | 显示全部楼层

大神,受累帮忙瞟一眼,看看是啥问题
  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 = requests.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 = requests.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.         pattern = re.compile('https://v.qq.com/x/cover/(.*?).html')
  27.         cid = pattern.findall(host)[0]
  28.         if first_select == 1:
  29.             #获取电视剧集链接
  30.             url_link ='https://pbaccess.video.qq.com/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=3000010&vplatform=2'
  31.              data = {
  32.                 'cid': cid,
  33.                 'id_type': "1",
  34.                 'lid': "",
  35.                 'page_context': "",
  36.                 'page_id': "vsite_episode_list",
  37.                 'page_num': "",
  38.                 'page_size': "30",
  39.                 'page_type': "detail_operation",
  40.                 'req_from': "web",
  41.                 'vid': "d0027j9renh"
  42.             }
  43.             res_series = requests.post(url=url_link,headers=self.headers,data=data).json()
  44.             print(res_series)
  45.             #运行不下去了~~~~~~~
  46.             select = int(input('需要哪一集:'))

  47.             # last_host = 'https://api.akmov.net/?url='+ new_link
  48.         else:
  49.             # 电影是直接可以得到链接地址
  50.             last_host =  host
  51.         self.driver = webdriver.Edge()
  52.         self.driver.get(last_host)

  53.     def main(self):
  54.         # name = input('请输入电视局名或电影名:')
  55.         name = '沙海'
  56.         query  = {'wd':name}
  57.         name_link = parse.urlencode(query)
  58.         url = 'https://v.qq.com/x/search/?q={}&stag=0&smartbox_ab='.format(name_link)
  59.         html = self.get_html(url)
  60.         self.parse_html(html)
  61. if __name__ == '__main__':
  62.     spider=tencent_movie()
  63.     spider.main()
复制代码

代码到了这里时就运行不下去了
  1.   
  2. url_link = 'https://pbaccess.video.qq.com/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=3000010&vplatform=2'
  3.              data = {
  4.                 'cid': cid,
  5.                 'id_type': "1",
  6.                 'lid': "",
  7.                 'page_context': "",
  8.                 'page_id': "vsite_episode_list",
  9.                 'page_num': "",
  10.                 'page_size': "30",
  11.                 'page_type': "detail_operation",
  12.                 'req_from': "web",
  13.                 'vid': "d0027j9renh"
  14.             }
  15.             res_series = requests.post(url=url_link,headers=self.headers,data=data).json()
  16.             print(res_series)
  17.             #运行不下去了~~~~~~~
复制代码

因为得到的 res_series = {'ret': 35013, 'msg': 'unknow error.'}
不是正常的数据
求大神帮忙看看,问题时在哪里?
是data错了,还是腾讯视频有什么反爬机制?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 14:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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