python-3.x - python中网络抓取期间的json错误转储
问题描述
我正在尝试从数字公共网站下载缩略图以进行 imageJ 可视化。一切都打印出来,直到 JSON 转储文件。我有一个朋友编写的代码来下载图像,但在继续之前我需要有一个 URL 的 json 文件。最后,它给了我“Tag 类型的对象不是 JSON 可序列化的对象”的错误。
对不起,我是堆栈溢出的新手,当我从 Sublime 复制和过去时,它搞砸了。
from bs4 import BeautifulSoup
import requests
import re
import json
all_my_data = []
url = "https://www.digitalcommonwealth.org/search?f%5Bcollection_name_ssim%5D%5B%5D=Produce+Crate+Labels&f%5Binstitution_name_ssim%5D%5B%5D=Boston+Public+Library&per_page=50"
results_page = requests.get(url)
page_html = results_page.text
soup = BeautifulSoup(page_html, "html.parser")
all_labels = soup.find_all("div", attrs = {'class': 'document'})
for items in all_labels:
my_data = {
"caption": None,
"url": None,
"image url": None,
}
item_link = items.find('a')
abs_url = "https://www.digitalcommonwealth.org/search?f%5Bcollection_name_ssim%5D%5B%5D=Produce+Crate+Labels&f%5Binstitution_name_ssim%5D%5B%5D=Boston+Public+Library&per_page=50" + item_link["href"]
my_data["url"] = abs_url
#print(abs_url)
item_request = requests.get(abs_url)
item_html = item_request.text
item_soup = BeautifulSoup(item_html, "html.parser")
all_field_divs = item_soup.find_all("div", attrs={'class': 'caption'})
for field in all_field_divs:
caption = field.find("a")
cpation = caption.text
my_data["caption"] = caption
#print(caption)
all_photo_urls = item_soup.find_all("div", attrs={'class': 'thumbnail'})
for photo_url in all_photo_urls:
photo = photo_url.find('img')
photo_abs_url = "https://www.digitalcommonwealth.org/search?f%5Bcollection_name_ssim%5D%5B%5D=Produce+Crate+Labels&f%5Binstitution_name_ssim%5D%5B%5D=Boston+Public+Library&per_page=50" + photo['src']
my_data['image url'] = photo_abs_url
#print(photo_abs_url)
all_my_data.append(my_data)
#print(all_my_data)
with open('fruit_crate_labels.json', 'w') as file_object:
json.dump(all_my_data, file_object, indent=2)
print('Your file is now ready')
它打印这个:
回溯(最近一次调用):文件“dh.py”,第 54 行,在 json.dump(all_my_data, file_object, indent=2) 文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3. 7/json/初始化类。姓名' TypeError: 类型标签的对象不是 JSON 可序列化的
谢谢您的帮助!
解决方案
第 35 行的以下代码:
cpation = caption.text
应该:
caption = caption.text
然后您的代码似乎可以按您的预期工作。
推荐阅读
- kibana - Kibana 仪表板:部分消息匹配的聚合
- java - 为什么我不能发送电子邮件?
- javascript - RXJS 的 Subject inside Function
- python - 解压缩 .gz 文件以创建新行分隔的 json 文件 - 创建新行时出现问题
- python - 从 keras fit_generator() 到模型输入层的转换如何准确工作
- java - 终止线程似乎不起作用
- python - 通过服务帐户连接的 Python googleads 库。错误:AttributeError:“str”对象没有属性“CreateHttpHeader”
- c - 在嵌入式系统中使用 c 中的可变长度数组有问题吗?
- xcode - 如何获取多窗口 SceneDelegate Xcode 11 的当前键窗口等效项?
- ios - 在 ios 中接收没有通知警报的 Firebase 云消息传递