3 回答
TA贡献1827条经验 获得超4个赞
这都是关于类型的。
img_list实际上不是一个列表,而是一个字符串。您尝试调用它img_list()会导致错误。
您有正确的想法,可以使用json.loads. 这里的错误非常简单——jsonData是一个列表,而不是字典。你有不止一张图片。
您可以遍历列表。列表中的每个项目都是一个字典,您将能够url_large在列表中的每个字典中找到该属性:
images_json = img.attrs['data-images']
for image_properties in json.loads(images_json):
print(image_properties['url_large'])
TA贡献1871条经验 获得超8个赞
我也想更明确地说明我在您的代码中看到的内容。
在这个特定的块中:
img_list = img.attrs['data-images']
for k, v in img_list():
if k == 'url_large':
print(v)
有几个语法错误。如果“img_list”真的是一本字典,你就不能用这种方式遍历它。您需要在第二行使用 img_list.items() (对于 python3)或 img_list.iteritems() (python2)。
当你像那样使用括号时,意味着你正在调用一个函数。但在这里,您正试图遍历字典。这就是为什么您会收到“不可调用”错误的原因。
另一个主要问题是类型问题。simic0de 和 Infinity 解决了这个问题,但最终您需要检查 img_list 的类型并根据需要进行转换,以便您可以遍历它。
TA贡献1802条经验 获得超4个赞
错误来源: img_list是一个字符串。您必须将其转换为列表 usingjson.loads并且它不会成为您必须循环的字典列表。
工作解决方案:
import json
import requests
from bs4 import BeautifulSoup
# Enter the URL of the webpage you want to download the images from
page = 'https://www.archdaily.com/63267/ad-classics-house-vi-peter-eisenman/5037e0ec28ba0d599b000190-ad-classics-house-vi-peter-eisenman-image'
# Returns the webpage source code under page_doc
result = requests.get(page)
page_doc = result.content
# Returns the source code as BeautifulSoup object, as nested data structure
soup = BeautifulSoup(page_doc, 'html.parser')
img = soup.find('div', class_='afd-gal-items')
img_list = img.attrs['data-images']
for img in json.loads(img_list):
for k, v in img.items():
if k == 'url_large':
print(v)
添加回答
举报