3 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊
這都是關(guān)于類型的。
img_list實(shí)際上不是一個(gè)列表,而是一個(gè)字符串。您嘗試調(diào)用它img_list()會(huì)導(dǎo)致錯(cuò)誤。
您有正確的想法,可以使用json.loads. 這里的錯(cuò)誤非常簡單——jsonData是一個(gè)列表,而不是字典。你有不止一張圖片。
您可以遍歷列表。列表中的每個(gè)項(xiàng)目都是一個(gè)字典,您將能夠url_large在列表中的每個(gè)字典中找到該屬性:
images_json = img.attrs['data-images']
for image_properties in json.loads(images_json):
print(image_properties['url_large'])

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個(gè)贊
我也想更明確地說明我在您的代碼中看到的內(nèi)容。
在這個(gè)特定的塊中:
img_list = img.attrs['data-images']
for k, v in img_list():
if k == 'url_large':
print(v)
有幾個(gè)語法錯(cuò)誤。如果“img_list”真的是一本字典,你就不能用這種方式遍歷它。您需要在第二行使用 img_list.items() (對(duì)于 python3)或 img_list.iteritems() (python2)。
當(dāng)你像那樣使用括號(hào)時(shí),意味著你正在調(diào)用一個(gè)函數(shù)。但在這里,您正試圖遍歷字典。這就是為什么您會(huì)收到“不可調(diào)用”錯(cuò)誤的原因。
另一個(gè)主要問題是類型問題。simic0de 和 Infinity 解決了這個(gè)問題,但最終您需要檢查 img_list 的類型并根據(jù)需要進(jìn)行轉(zhuǎn)換,以便您可以遍歷它。

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊
錯(cuò)誤來源: img_list是一個(gè)字符串。您必須將其轉(zhuǎn)換為列表 usingjson.loads并且它不會(huì)成為您必須循環(huán)的字典列表。
工作解決方案:
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)
添加回答
舉報(bào)