我正在尝试从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代码来查看它们。
我是否错误地保存了二进制文件?
答案 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"
}
}