Python下载来自HTTPS aspx的图像

时间:2018-01-17 19:54:04

标签: python asp.net https python-requests binaryfiles

我正在尝试从NASS Case Viewer下载一些图像。案例的一个例子是

此案例的图片查看器的链接是

可能无法查看,我假设因为https。但是,这只是 Front 第二张图片。

图像的实际链接是(或应该是?)

这只是下载aspx二进制文件。

我的问题是我不知道如何将这些二进制文件存储到正确的jpg文件中。

我尝试的代码示例是

import requests 
test_image = "https://www-nass.nhtsa.dot.gov/nass/cds/GetBinary.aspx?Image&ImageID=497001669&CaseID=149006692&Version=1"
pull_image = requests.get(test_image)

with open("test_image.jpg", "wb+") as myfile:
    myfile.write(str.encode(pull_image.text))

但这不会产生正确的jpg文件。我也检查了pull_image.raw.read(),发现它是空的。

这可能是什么问题?我的网址不合适吗?我已经使用Beautifulsoup将这些URL放在一起,并通过检查几页中的HTML代码来查看它们。

我是否错误地保存了二进制文件?

2 个答案:

答案 0 :(得分:1)

.text将响应内容解码为字符串,因此您的imge文件将被破坏 相反,您应该使用保存二进制响应内容的.content

import requests 

test_image = "https://www-nass.nhtsa.dot.gov/nass/cds/GetBinary.aspx?Image&ImageID=497001669&CaseID=149006692&Version=1"
pull_image = requests.get(test_image)

with open("test_image.jpg", "wb+") as myfile:
    myfile.write(pull_image.content)

.raw.read()也会返回字节,但为了使用它,您必须将stream参数设置为True

pull_image = requests.get(test_image, stream=True)
with open("test_image.jpg", "wb+") as myfile:
    myfile.write(pull_image.raw.read())

答案 1 :(得分:0)

我想跟进@ t.m.adam的回答,为有兴趣将这些数据用于自己项目的人提供完整的答案。

这是我的代码,用于提取案例ID样本的所有图像。它是相当不干净的代码,但我认为它可以为您提供入门所需的内容。

{
  "13377": {
    "id": 13377,
    "orderId": 13377,
    "executionStatus": "-1",
    "comment": "",
    "htmlComment": "",
    "cycleId": -1,
    "cycleName": "Ad hoc",
    "versionId": 10001,
    "versionName": "Version2",
    "projectId": 10000,
    "createdBy": "vm_admin",
    "modifiedBy": "vm_admin",
    "assignedTo": "user1",
    "assignedToDisplay": "user1",
    "assignedToUserName": "user1",
    "assigneeType": "assignee",
    "issueId": 10013,
    "issueKey": "SAM-14",
    "summary": "Test",
    "label": "",
    "component": "",
    "projectKey": "SAM",
    "folderId": 233,
    "folderName": "testfolder"
  }
}