首页 > 编程问答 >将 cookie 数据添加到 requests.urlretrieve 中

将 cookie 数据添加到 requests.urlretrieve 中

时间:2024-08-02 04:58:18浏览次数:7  
标签:python cookies python-requests urlretrieve

我正在尝试从受密码保护的网站下载 .torrent 文件。 我已经成功地使用 cookie 访问该网站,如下所示:

cookies = {'uid': '232323', 'pass': '31321231jh12j3hj213hj213hk',
           '__cfduid': 'kj123kj21kj31k23jkl21j321j3kl213kl21j3'}
    try:
        # read site content
        read = requests.get(s_string, cookies=cookies).content
    except RequestException as e:
        raise print('Could not connect to somesite: %s' % e)

    soup = BeautifulSoup(read, 'html.parser')

使用上面的代码,我可以访问该网站并抓取我需要的数据。使用抓取的数据,我构建了一个指向 .torrent 文件的链接,然后我想下载该文件,但这就是我陷入困境的地方。

这是我现在正在尝试的:(cookie 数据显然不是真实的,就像它不是在上面的代码中)

cookies = {'uid': '232323', 'pass': '31321231jh12j3hj213hj213hk',
               '__cfduid': 'kj123kj21kj31k23jkl21j321j3kl213kl21j3'}

# construct download URL
torrent_url = ('https://www.somesite.com/' + torrent_url)
# for testing purposes DELETE!
print('torrent link:', torrent_url)

# download torrent file into a folder
filename = torrent_url.split('/')[-1]
save_as = 'torrents/' + filename + '.torrent'

try:
    r = request.urlretrieve(torrent_url, save_as, data=cookies)
    print("Download successful for: " + filename)
except request.URLError as e:
        raise print("Error :%s" % e)

此代码可以在普通站点上没有 cookie 的情况下工作,但是我试图获取的这个 .torrent 文件位于密码/验证码站点后面,所以我需要使用 cookie 来抓取它。所以问题是,我在这里做错了什么?没有

我得到 data=cookies 并且有了 http 404 error 我得到以下错误: data=cookies ps。在有人问之前,是的,我 100% 确定 torrent_url 是正确的,我将其打印出来并手动将其复制/粘贴到我自己的浏览器中,提示相关 .torrent 文件的下载窗口

File "/usr/lib/python3.6/http/client.py", line 1064, in _send_output
+ b'\r\n'
TypeError: can't concat str to bytes </error>

编辑:

以此为基础根据furas的建议,它现在可以工作了,但是当我尝试打开.torrent时,torrent客户端说“无效编码,无法打开”。

try:
   read = requests.session().get(torrent_url)
   with open(save_as, 'wb') as w:
       for chunk in read.iter_content(chunk_size=1024):
           if chunk:
               w.write(chunk)
           w.close()
           print("Download successful for: " + filename)
 except request.URLError as e:
     print("Error :%s" % e)

当我打开.torrent文件时,里面是这样的:

我还在吗做错了什么或者这与网站所有者阻止程序从他的网站下载 .torrents 或类似性质的东西有关?

<h1>Not Found</h1>
<p>Sorry pal :(</p>
<script src="/cdn-cgi/apps/head/o1wasdM-xsd3-9gm7FQY.js"></script>

am i still doing something wrong or has this something to do with the site owner preventing programs from downloading .torrents from his site or something of that nature?


requests.urlretrieve 没有 cookie 参数。 requests.urlretrieve 用于更简单的用例。 相反,你应该使用 requests.Session 来维护 cookie,例如:

import requests

cookies = {'uid': '232323', 'pass': '31321231jh12j3hj213hj213hk',
           '__cfduid': 'kj123kj21kj31k23jkl21j321j3kl213kl21j3'}

torrent_url = ('https://www.somesite.com/' + torrent_url)
filename = torrent_url.split('/')[-1]
save_as = 'torrents/' + filename + '.torrent'

try:
    with requests.Session() as s:
        s.cookies.update(cookies)
        r = s.get(torrent_url)
        r.raise_for_status()  # 检查 HTTP 错误
        with open(save_as, 'wb') as f:
            f.write(r.content)
    print("下载成功:" + filename)
except requests.exceptions.RequestException as e:
    print("错误:%s" % e)

此代码执行以下操作:

  1. 创建一个 requests.Session 对象。
  2. 使用 cookies 字典更新会话的 cookie。
  3. 使用会话的 get() 方法获取 torrent 文件。
  4. 检查响应是否包含错误。
  5. 将 torrent 文件的内容写入文件。

注意: 从网站下载受版权保护的材料在某些司法管辖区可能是非法的。 请确保你的行为符合你所在地区的法律法规。

标签:python,cookies,python-requests,urlretrieve
From: 48062237

相关文章

  • 如何在Scrapy中下载根据Cookies url生成的文件
    我正在尝试下载一个文件,该文件的下载链接是根据某些Cookie生成的。我有一个PDF文件,显示在查看器中,该查看器有一个下载按钮当我单击此图标时,会根据HTML中的hidden_​​document_field_id输入值生成临时下载链接,因此本例中的临时下载链接是......
  • 在 Python 生成器中使用“with”语句管理资源
    今天,在编程时,我发现自己在生成器函数内管理资源(ssh连接),类似于以下内容:def_yield_fname(host_address,usr,pwd,datapath):withparamiko.SSHClient()asssh_client:ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh_client.......
  • Avro:在 Python 中使用多处理进行解码
    就最佳性能和更少延迟而言,哪种异步方法更适合解码从Kafka主题消耗的Avro消息?我正在使用Avro库的并发future,并且我仍然可以看到类似的执行时间与不使用并发future的情况相比。fromavro.ioimportBinaryDecoder,DatumReaderfromconfluent_kafka.avro.cached_sc......
  • 白盒测试基础与实践:Python示例及流程图设计
    文章目录前言一、白盒测试是什么?主要特点常用方法优点缺点二、白盒测试常用技术语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖路径覆盖三、程序流程图设计四、测试用例设计1.基本路径法2.语句覆盖3.判断覆盖4.条件覆盖5.判断/条件覆盖6.条件组合覆盖总结......
  • 【python的语法特点,如注释规则、代码缩进、编写规范等】
    介绍一下python的语法特点,如注释规则、代码缩进、编写规范等Python是一种广泛使用的高级编程语言,以其简洁易读的语法、丰富的标准库和强大的第三方库而闻名。下面我将详细介绍Python的一些基本语法特点,包括注释规则、代码缩进、以及编写规范等。一、注释规则Python......
  • 深圳大学-数据科学导论实验-python数据探索
    实验目的与要求掌握python编程基础。掌握数据探索基本操作。实验环境WindowsPyCharm实验数据salaries.csv"","rank","discipline","yrs.since.phd","yrs.service","sex","salary""1","Prof","B",......
  • 基于Python+Django协同过滤算法的招聘信息推荐系统设计与实现(源码+数据库+讲解)
    文章目录前言详细视频演示项目运行截图技术框架后端采用Django框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • python 栈帧沙箱逃逸
    基础理论什么是生成器生成器是python中的一种特殊的迭代器,在每次生成值以后会保留当前状态,以便下次调用可以继续生成值.python中生成器通过yield关键词进行定义,每次调用的时候返回一个值,并保持当前状态的同时暂停函数的执行.当下一次调用生成器的时候,函数会从上次暂停的位......
  • Transformer预测模型及其Python和MATLAB实现
    ###一、背景在自然语言处理(NLP)领域,传统的序列到序列(Seq2Seq)模型大多依赖于循环神经网络(RNN)和长短期记忆(LSTM)网络。这些模型虽然在许多任务中取得了成功,但由于其计算效率低下以及长距离依赖关系处理的不足,导致模型训练时间漫长,并在处理较长文本时效果不佳。2017年,Vaswani等人......
  • 随机森林(Random Forest)预测模型及其特征分析(Python和MATLAB实现)
    ##一、背景在大数据和机器学习的快速发展时代,数据的处理和分析变得尤为重要。随着多个领域积累了海量数据,传统的统计分析方法常常无法满足复杂问题的需求。在这种背景下,机器学习方法开始广泛应用。随机森林(RandomForest)作为一种强大的集成学习方法,因其高效性和较强的泛化能......