【问题标题】:HTTP GET In PythonPython中的HTTP GET
【发布时间】:2021-11-07 15:19:00
【问题描述】:

我有一个 bash 脚本,它从 URL 下载大量文件并将它们保存到我的计算机,例如:

curl 'http://website.com/shop.php?store_id=[66-900]&page=[7-444]&PHPSESSID=phpsessid' -O

(以及一组标头,当您在 Firefox 中将请求复制为 curl 时获得的典型请求)

试图用python重写脚本,但结果非常困难(完全新手) 喜欢:

import requests

cookies = {
    'PHPSESSID': '<phpsessid here>',
}

headers = {
    '<bunch of header stuff here>'
}

params = (
    ('store_id', '[66-900]'),
    ('page', '[7-444]'),
    ('PHPSESSID', '<phpsessid here>'),
)

response = requests.get('http://website.com/shop.php', headers=headers, params=params, cookies=cookies)

但它什么也没做(curl 命令按照命令下载所有内容) 我意识到我可能需要将下载的内容写入一个文件,但我完全丢失了,因为我处理的不是一个文件而是数百个文件,从上面的 curl 命令可以看出。

完全丢失了我所缺少的或需要做的以在 python 中复制类似 curl 请求的内容,感谢任何帮助!

【问题讨论】:

  • requests 可能会得到一些东西,但它不会自动将其保存在文件中。您应该检查response.content 中的内容并编写将其写入文件的代码。
  • 看来你应该把它写成for-loop 并在store_id 中使用单个值而不是[66-900]page 相同

标签: python python-requests get


【解决方案1】:

你不能像使用 curl 一样使用范围。

正如@furas 所说,您可以使用循环,因为 curl 发送的请求包含范围内的所有参数组合。

函数response.get返回一个类requests.models.Response的对象,所以你应该使用json()方法或属性content(返回字节)和text(返回字符串)。

【讨论】:

    【解决方案2】:

    你必须使用for-loops 而不是[66-900][7-444]

    for store_id in range(66, 990+1):
        for page in range(7, 444+1):
    
            params = {
               'store_id': store_id,
               'page': page,
               'PHPSESSID': '<phpsessid here>',
            }
    
            response = requests.get(...)
    
            with open(f"{store_id}-{page}", "wb") as fh:
                 fh.write(response.content)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-04
      • 1970-01-01
      • 2010-09-10
      • 2010-09-17
      • 2020-06-23
      • 2016-11-04
      • 2012-04-17
      相关资源
      最近更新 更多