LifeActor / ykdl

a video downloader focus on China mainland video sites.(一款专注于中国大陆视频网站的视频下载器。)
https://github.com/LifeActor/ykdl
Other
1.45k stars 285 forks source link

[Error] download PPTV video error 404 #558

Closed HermanZzz closed 3 years ago

HermanZzz commented 3 years ago

在提交前,请确保您已经检查了以下内容!

请将错误输出粘贴在下面:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.6/bin/ykdl", line 11, in <module>
    load_entry_point('ykdl==1.6.2', 'console_scripts', 'ykdl')()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/cykdl/__main__.py", line 173, in main
    info = parser(u)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/ykdl/extractor.py", line 24, in parser
    info = self.prepare()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/ykdl/extractors/pptv.py", line 206, in prepare
    xml = get_content('http://web-play.pptv.com/webplay3-0-{}.xml?zone=8&version=4&username=&ppi=302c3333&type=ppbox.launcher&pageUrl=http%3A%2F%2Fv.pptv.com&o=0&referrer=&kk=&scver=1&appplt=flp&appid=pptv.flashplayer.vod&appver=3.4.3.3&nddp=1'.format(self.vid))
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/ykdl/util/html.py", line 67, in get_content
    response = urlopen(req)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 223, in urlopen
    return opener.open(url, data, timeout)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 532, in open
    response = meth(req, response)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 642, in http_response
    'http', request, response, code, msg, hdrs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 570, in error
    return self._call_chain(*args)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 504, in _call_chain
    result = func(*args)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 650, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found

如果您有其他附言,例如问题只在某个视频发生,或者是一般性讨论或者提出新功能,请在下面添加:

example url: https://v.pptv.com/show/0lCsO6MJebcamAA.html

mengmo commented 3 years ago
ykdl -h
usage: ykdl [-h] [-l] [-i] [-J] [-F FORMAT] [-o OUTPUT_DIR] [-O OUTPUT_NAME]
            [-p PLAYER] [-k] [--proxy PROXY] [-t TIMEOUT]
            [--fail-retry-eta FAIL_RETRY_ETA] [--no-fail-confirm] [--no-merge]
            [-s START] [-j JOBS] [--debug]
            video_urls [video_urls ...]

YouKuDownLoader(ykdl 1.7.0), a video downloader. Forked form you-get
0.3.34@soimort

positional arguments:
  video_urls            video urls
ykdl -i https://v.pptv.com/show/0lCsO6MJebcamAA.html
site:                PPTV (PP聚力)
title:               十一娘回侯府正面gank乔姨娘,拿回谆哥抚养权
artist:              None
streams:
    - format:        HD
      container:     mp4
      video-profile: 852x480@237kbps
      size:          12.1 MiB (12653713 bytes)
    # download-with: ykdl --format=HD [URL]
Real urls:
http://aliyun.vod.pptv.com/0/e13c1e23665b8b47653f88d6549ef1d0.mp4?key=
    - format:        SD
      container:     mp4
      video-profile: 720x404@215kbps
      size:          12.1 MiB (12653713 bytes)
    # download-with: ykdl --format=SD [URL]
Real urls:
http://aliyun.vod.pptv.com/0/e0e0b8d270f94b4c6fd698206e62f759.mp4?key=
    - format:        LD
      container:     mp4
      video-profile: 480x270@229kbps
      size:          12.1 MiB (12653713 bytes)
    # download-with: ykdl --format=LD [URL]
Real urls:
http://aliyun.vod.pptv.com/0/1f45dd8f4cc373dfd3417e26a1850650.mp4?key=
SeaHOH commented 3 years ago

默认 User-Agent 被封杀 。。。you-get 的没有封

怀疑是某个内置 ykdl 的软件引起的,普通用户应该不会造成这种结果。

mengmo commented 3 years ago

默认 User-Agent 被封杀 。。。you-get 的没有封

怀疑是某个内置 ykdl 的软件引起的,普通用户应该不会造成这种结果。

@SeaHOH 你确定是在讨论此 issue

ykdl -O 0_test https://v.pptv.com/show/0lCsO6MJebcamAA.html
site:                PPTV (PP聚力)
title:               十一娘回侯府正面gank乔姨娘,拿回谆哥抚养权
artist:              None
streams:
    - format:        HD
      container:     mp4
      video-profile: 852x480@237kbps
      size:          12.1 MiB (12653713 bytes)
    # download-with: ykdl --format=HD [URL]
Start downloading: 0_test
                                                                                            100% [1/1] [00:03]
Current downloaded 5.26 MB, cost 00:03.
Total downloaded 5.26 MB of 5.26 MB, cost 00:03
SeaHOH commented 3 years ago

@SeaHOH 你确定是在讨论此 issue

是的,我也观察到 404 错误,和你不一样。可能分配到的 CDN 不同。

airdge commented 3 years ago

间歇性无法获取,打印了html 无结果输出

SeaHOH commented 3 years ago

随便改一个字符就可以重新获取

mengmo commented 3 years ago

是的,我也观察到 404 错误,和你不一样。可能分配到的 CDN 不同。

用你给的 ip 遇到 HTTP Error 404: Not Found 了 试了试,确实与 User-Agent 有关 不过,默认 UA 也有点儿太老了吧? 六年前的 Firefox 38,估计现在就没几个人用

HermanZzz commented 3 years ago

发现有的可以成功, 但是失败的还是大大多数:ykdl -i https://v.pptv.com/show/zpicreOBGtvRX1T0.html --debug DEBUG:common:video_host> v.pptv.com DEBUG:common:short_name> pptv DEBUG:html:get_content> URL: https://v.pptv.com/show/zpicreOBGtvRX1T0.html DEBUG:html:get_content> Charset: utf-8 DEBUG:html:get_content> URL: http://web-play.pptv.com/webplay3-0-None.xml?zone=8&version=4&username=&ppi=302c3333&type=ppbox.launcher&pageUrl=http%3A%2F%2Fv.pptv.com&o=0&referrer=&kk=&scver=1&appplt=flp&appid=pptv.flashplayer.vod&appver=3.4.3.3&nddp=1 Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.6/bin/ykdl", line 11, in <module> load_entry_point('ykdl==1.6.2', 'console_scripts', 'ykdl')() File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/cykdl/__main__.py", line 173, in main info = parser(u) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/ykdl/extractor.py", line 24, in parser info = self.prepare() File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/ykdl/extractors/pptv.py", line 206, in prepare xml = get_content('http://web-play.pptv.com/webplay3-0-{}.xml?zone=8&version=4&username=&ppi=302c3333&type=ppbox.launcher&pageUrl=http%3A%2F%2Fv.pptv.com&o=0&referrer=&kk=&scver=1&appplt=flp&appid=pptv.flashplayer.vod&appver=3.4.3.3&nddp=1'.format(self.vid)) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/ykdl/util/html.py", line 67, in get_content response = urlopen(req) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 223, in urlopen return opener.open(url, data, timeout) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 532, in open response = meth(req, response) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 642, in http_response 'http', request, response, code, msg, hdrs) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 570, in error return self._call_chain(*args) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 504, in _call_chain result = func(*args) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 650, in http_error_default raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 404: Not Found

HermanZzz commented 3 years ago

ua更改为Chrome还是失败了. 更改为IE成功了..

SeaHOH commented 3 years ago

发现有的可以成功, 但是失败的还是大大多数

你是不是在频繁大规模扒视频?不要这么做,会触发封杀。

不过,默认 UA 也有点儿太老了吧? 六年前的 Firefox 38,估计现在就没几个人用

跟老旧无关,改成 37 也行,原因如上所述。

mengmo commented 3 years ago

不过,默认 UA 也有点儿太老了吧? 六年前的 Firefox 38,估计现在就没几个人用

跟老旧无关,改成 37 也行,原因如上所述。

自然与新旧无关,但用户量少是一个问题 因为这基本等于是告诉服务器你在用的不像是常规的浏览器 而且因为用的人少,封了之后完全不会影响大多数人的使用

另,HermanZzz 用的是 1.6.2 我看 @SeaHOH 你在之后改过 pptv 的解析

SeaHOH commented 3 years ago

自然与新旧无关,但用户量少是一个问题 因为这基本等于是告诉服务器你在用的不像是常规的浏览器 而且因为用的人少,封了之后完全不会影响大多数人的使用

我估计是自动进行的,和用户人数无关,此机制应该涉及到请求 IP 因素。

另,HermanZzz 用的是 1.6.2 我看 @SeaHOH 你在之后改过 pptv 的解析

那个修改对这个 url 没有影响。

HermanZzz commented 3 years ago

没有额 如果要爬取的话也会用ip代理池

mengmo commented 3 years ago

我估计是自动进行的,和用户人数无关,此机制应该涉及到请求 IP 因素。

虽然没有太多这方面的经验,但是我遇到的反扒方式都是递增时间封 IP 的 临时封 User-Agent 的方式还是第一次见

SeaHOH commented 3 years ago

虽然没有太多这方面的经验,但是我遇到的反扒方式都是递增时间封 IP 的 封 User-Agent 的方式还是第一次见

可能有多个 IP 频繁触发,已经被临时封杀过,而国内永久的封 IP 不是个好办法,大多数都是动态分配的,封 UA 就一劳永逸。

SeaHOH commented 3 years ago

没有额 如果要爬取的话也会用ip代理池

只能继续观察,如果那些人还不住手,我也没有办法。

airdge commented 3 years ago

不是ip问题吧
没改ua前,ykdl的就是获取不到,用requests.get测试可以 改了ua:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:67.0) Gecko/20100101 Firefox/67.0 刷了几十次能获取到

SeaHOH commented 3 years ago

不是ip问题吧

最初 (这个 issue 提出之前) 可能只是临时封 IP,但现在国外服务器也这样了,肯定是封的 UA。也不知道是哪儿的混蛋,估计是个初学者,居然拿 ykdl 当批量扒取工具。

mengmo commented 3 years ago

不是ip问题吧

最初 (这个 issue 提出之前) 可能只是临时封 IP,但现在国外服务器也这样了

目前为止我这儿一切正常

SeaHOH commented 3 years ago

目前为止我这儿一切正常

我们该庆幸那人至少没有足够的能力把这个事情继续搞大。这么看来还是自动防御机制,没有全局黑名单,但估计就算是临时封这个时间也不会短,后续正常请求可能会增加这个时间。等那人折腾够了再说,过段时间我们换个 UA。

mengmo commented 3 years ago

过段时间我们换个 UA。

说到 UA 这事儿,个人觉得默认 UA 长期停留在某个浏览器的低版本上并不好 好在本项目的用户并不多,否则一定程度上可能会跟固守 IE 的那批人一样成为技术更新发展的阻碍 就算不想跟着版本帝频繁更换 UA,也可以考虑跟着 Firefox ESR 更新嘛

SeaHOH commented 3 years ago

国内的这些服务器似乎对 UA 并不敏感,旧一点也没有什么实质影响。当然,跟随 ESR 版本也挺好,但不应该是最新的,而是上一个版本,以免出现这种情况影响扩大。

mengmo commented 3 years ago

跟随 ESR 版本也挺好,但不应该是最新的,而是上一个版本,以免出现这种情况影响扩大。

https://wiki.mozilla.org/Release_Management/Calendar 就目前而言,这个上一个版本指的是77还是68

SeaHOH commented 3 years ago

就目前而言,这个上一个版本指的是77还是68

大版本,68。事实上按当前日程,60 也行,没必要追得太紧,不然可能影响浏览器用户。

airdge commented 3 years ago

搞个LTS版本就行,现在那个太低

SeaHOH commented 3 years ago

a2c1de69fc84dd1b863b17e90c4e786a4beae6a2 更改为 v60.1

mengmo commented 3 years ago

a2c1de6 更改为 v60.1

@SeaHOH

fp_60_1_ua

SeaHOH commented 3 years ago

没必要一样,真的,有区别更好。

mengmo commented 3 years ago

没必要一样,真的,有区别更好。

这个…… 改为 v60.1 与改为 v68.21 或 v78.11 或 v89.0 是一样的 你想想是不是?

SeaHOH commented 3 years ago

UA 只是一个身份声明,其本身没有强制的格式限制,我们可以随意设置,当前是模拟浏览器。之所以改为不算太旧的 v68,只是考虑到过于老旧的浏览器的请求可能会被服务器拒绝,到目前为止这也仅是个可能性而已。但不能与较新的浏览器版本相同或过于相似,以防 ykdl 激发的 UA 相关问题扩散,影响到无关的浏览器用户。