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)
添加回答
舉報