python - 尝试从链接下载视频时出现 403 Forbidden - Python

标签 python https python-requests download http-status-code-403

概述

我使用的网站是Gogoanime,它允许用户观看和下载动漫。我想自动化下载过程。还值得注意的是,我制作此仅供个人使用。

!在点击任何链接之前,请先安装广告拦截器!

这是网站 --> https://www2.gogoanime.cm/ 这是一个剧集示例 --> https://www2.gogoanime.cm/death-note-dub-episode-1

每集都有一个下载按钮。这是上述剧集的下载页面。 --> https://gogoplay1.com/download?id=OTA3OTk=&typesub=Gogoanime-DUB&title=Death+Note+%28Dub%29+Episode+1

如果您单击任何下载链接,该剧集将开始下载。如果您选择“链接另存为”,下载也会开始。但是,如果将链接粘贴到新选项卡中,则会出现 403 错误。我已经能够抓取这些链接,但无法通过 Python 下载它们。这些链接下载似乎来自“vidstreaming”,后来更名为 gogoplay1 --> https://gogoplay1.com/ .

我尝试了很多方法,例如伪造用户代理、修改 cookie 以及使用 cloudflare,但每次请求下载链接时,都会遇到 403 禁止错误。

还值得注意的是这个包-->https://pythonrepo.com/repo/BaraniARR-anikimiapi-python-third-party-apis-wrappers ,虽然目前已损坏,但提到了有关“ token ”的内容。我花了很长时间检查代码,但我无法获得 token 来帮助我。

我在某处读到,我需要在某些服务器上进行身份验证,但我找不到 gogoanime 或 gogoplay1 的身份验证类型。

最小可重现示例:

这里是所描述的下载链接之一 --> https://gogo-cdn.com/download.php?url=aHR0cHM6LyAawehyfcghysfdsDGDYdgdsfsdfwstdgdsgtert9AdrefsdsdfwerFrefdsfrersfdsrfer36343534jZG41LmFuaWNkbi5zdHJlYW0vdXNlcjEzNDIvN2ZjZmYzYzBkYjgxNWQ5MTIzNzI1MzA3MWI3ZTc0NzIvRVAuMS52MC4xNjM5MTc0MzgyLjcyMHAubXA0P3Rva2VuPVdIRVVaOUVjd0lJLU9iUXAwcGhXTXcmZXhwaXJlcz0xNjQxMjcyNDA4JmlkPTkwNzk5

您可以运行此代码以获得更多(不同质量的)

import requests_html 

url = "https://gogoplay1.com/download?id=OTA3OTk=&typesub=Gogoanime-DUB&title=Death+Note+%28Dub%29+Episode+1"
session = requests_html.HTMLSession()
response = session.get(url)

links = response.html.absolute_links
for link in links:
    if "gogo-cdn" in link:
        print(link)

这是无法从链接下载的代码。

from fake_useragent import UserAgent
import cloudscraper
import requests

url = "https://gogo-cdn.com/download.php?url=aHR0cHM6LyAawehyfcghysfdsDGDYdgdsfsdfwstdgdsgtert9AdrefsdsdfwerFrefdsfrersfdsrfer36343534jZG41LmFuaWNkbi5zdHJlYW0vdXNlcjEzNDIvN2ZjZmYzYzBkYjgxNWQ5MTIzNzI1MzA3MWI3ZTc0NzIvRVAuMS52MC4xNjM5MTc0MzgyLjcyMHAubXA0P3Rva2VuPVdIRVVaOUVjd0lJLU9iUXAwcGhXTXcmZXhwaXJlcz0xNjQxMjcyNDA4JmlkPTkwNzk5"
my_session = cloudscraper.create_scraper()
for_cookies = my_session.get("https://www.gogoplay1.com/") #don't know whether to use gogoanime or gogoplay1
cookies = for_cookies.cookies

response = my_session.get(url, headers={"User-Agent":UserAgent().chrome}, cookies=cookies)
print(response.status_code)

最后,我应该提一下,我对 Python 有一定的了解,但在抓取/网络内容方面几乎没有。因此,行话和复杂的流程可能让我无法理解。感谢您阅读这篇长文,并提前感谢您的帮助。

最佳答案

试试这个,

from bs4 import BeautifulSoup
import cloudscraper

url = 'https://gogoplay.io/download?id=MTE3MTk0&title=One+Punch+Man+%28Dub%29&typesub=SUB&sub=&cover=Y292ZXIvb25lLXB1bmNoLW1hbi1kdWIucG5n&refer=https://gogoplay1.com/&ch=d41d8cd98f00b204e9800998ecf8427e'

scraper = cloudscraper.create_scraper(browser = 'chrome')
response = scraper.get(url)
if response.status_code == 200:
    print("downloads page")
    soup = BeautifulSoup(scraper.get(url).text, 'lxml')
    download_low_p_url = soup.find('div', {'class': 'mirror_link'}).find_all('div', {'class': 'dowload'})[0].find('a')['href'] # List contains all the links [360, 480, 780, 1080]. I choose 0 (first, 360p).
    print("getting cdn link for lowest quality", download_low_p_url)
    response = scraper.get(download_low_p_url)
    if response.status_code == 302:
        print("downloading from cdn", response.url)
        response = scraper.get(response.url, headers = {'Referer': 'https://gogoplay1.com/'}) #Referer is necessary else it throws 403
        if response.status_code == 200:
            with open('ep1.mp4', 'wb') as file:
                file.write(response.content)
            print("download complete")
        else:
            print("download error", response.status_code)
    else:
        print("cdn error", response.status_code)
else:
    print("base error", response.status_code)

在检查请求轨迹时,下载链接有一个重定向 URL,其中包含作为参数的时间限制 token 。因此,我最初向下载页面发送了一个请求,然后发送到最低质量的请求(只是为了节省下载时间,服务器速度很慢),该请求在响应 header 中(也称为重定向 url)中有一个位置。最后,我们可以向重定向 URL 发送请求并将内容写入文件。

这就像一个骷髅。添加您的功能(例如选择质量的选项)。祝学习愉快!

关于python - 尝试从链接下载视频时出现 403 Forbidden - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70573134/

相关文章:

file - 仅使用 htaccess 文件将 SSL 应用于一页

python - BottlyPy - 如何阅读 UWSGI_SCHEME?

Python 3.x 请求使用 unicode 字符进行重定向

python - 是什么导致 http 请求覆盖 ​​file.write() 创建的内部缓冲区?

python-3.x - Python SSL证书验证错误

c# - 将C#中的长字符串发送到Python的最快方法

python - 设置样式表后如何恢复 matplotlib 默认值

https - Kubernetes https服务暴露

python - 如何让Python的findall正则表达式方法包含

python - 将 Django 模型表单与多个数据库一起使用时出错