非凡 发表于 2021-11-22 17:01:04

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

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

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

比如:
        我现在想爬腾讯视频电视剧《沙海》,我现在想要先获取到这一电视剧所有集的url,以便供我选择。

        但是这选集这里的资源包我是找了好久没找到。

        有没有什么办法,或工具推荐吗?

suchocolate 发表于 2021-11-22 21:10:35

让我猜猜你的代码

z5560636 发表于 2021-11-23 10:41:00

应该是 ajax 请求的吧。

非凡 发表于 2021-11-23 14:40:38

suchocolate 发表于 2021-11-22 21:10
让我猜猜你的代码

{:10_269:}还没写代码还没写全,只是还在就卡在找这电视剧集的资源时,卡主了。

非凡 发表于 2021-11-23 14:42:07

本帖最后由 非凡 于 2021-11-23 14:43 编辑

suchocolate 发表于 2021-11-22 21:10
让我猜猜你的代码

电影的url都能爬到了,到了电视剧某一集这里卡了,后面还想去下载资源,代码还没写。。。。
{:10_287:}大佬,请收下我的膝盖
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

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 = requests.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
      res = requests.get(host,headers=self.headers)
      con = res.content.decode('utf-8')
      new_html = etree.HTML(con)
      first_select = int(input('1.电视剧\n2.电影\n'))
      if first_select == 1:
            #获取电视剧集链接
            new_links = new_html.xpath('//div[@class="mod_episode"]/span/a/@href')
            print(len(new_links))
            select = int(input('需要哪一集:'))
            new_link = new_links
            last_host = 'https://api.akmov.net/?url='+new_link
      else:
            # 电影是直接可以得到链接地址
            last_host =host
      self.driver = webdriver.Edge()
      self.driver.get(last_host)

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

suchocolate 发表于 2021-11-23 15:39:21


没有特别的技巧,就是筛选,重点看html和json。数据一般都在这里。

非凡 发表于 2021-11-23 18:17:50

suchocolate 发表于 2021-11-23 15:39
没有特别的技巧,就是筛选,重点看html和json。数据一般都在这里。

感谢指教,我找到这包了。
但现在我产生个新疑惑了,图片上是两个不同电视剧的剧集资源的包,但我看他包里的标头,竟然全都是一模一样的,这是什么原因啊?
请求url一样,path一样,啥都是一样的,那我根据什么去获取不同电视剧的剧集资源呢?

18408238295 发表于 2021-11-23 20:13:20

{:10_256:}

suchocolate 发表于 2021-11-23 20:57:32

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

看请求的带的data

非凡 发表于 2021-11-25 14:39:43

suchocolate 发表于 2021-11-23 20:57
看请求的带的data

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

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

    def main(self):
      # name = input('请输入电视局名或电影名:')
      name = '沙海'
      query= {'wd':name}
      name_link = parse.urlencode(query)
      url = 'https://v.qq.com/x/search/?q={}&stag=0&smartbox_ab='.format(name_link)
      html = self.get_html(url)
      self.parse_html(html)
if __name__ == '__main__':
    spider=tencent_movie()
    spider.main()
代码到了这里时就运行不下去了

url_link = 'https://pbaccess.video.qq.com/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=3000010&vplatform=2'
             data = {
                'cid': cid,
                'id_type': "1",
                'lid': "",
                'page_context': "",
                'page_id': "vsite_episode_list",
                'page_num': "",
                'page_size': "30",
                'page_type': "detail_operation",
                'req_from': "web",
                'vid': "d0027j9renh"
            }
            res_series = requests.post(url=url_link,headers=self.headers,data=data).json()
            print(res_series)
            #运行不下去了~~~~~~~
因为得到的 res_series = {'ret': 35013, 'msg': 'unknow error.'}
不是正常的数据
求大神帮忙看看,问题时在哪里?
是data错了,还是腾讯视频有什么反爬机制?
页: [1]
查看完整版本: 如何在一个动态网站种找到某一资源的包是哪个?