使用 python json.dump(Array, outfile) 将数据转储到输出文件
Dumping data to outputfile with python json.dump(Array, outfile)
我正在尝试使用以下代码将数据 'scraped' 从站点写入 json 输出文件:
from bs4 import BeautifulSoup
import requests
import json
path = ["https://www.test.be?page=,https://www.test2.be?page="]
adresArr = []
for i in path:
pagina = 0;
for x in range(0, 4):
url = i + str(pagina)
response = requests.get(url, timeout=5)
content = BeautifulSoup(response.content, "html.parser")
for adres in content.findAll('tr', attrs={"class": "odd clickable-row"}):
adresObject = {
"postcode": adres.find('td', attrs={"class": "views-field views-field-field-locatie-postal-code"}).text.encode('utf-8'),
"naam": adres.find('td', attrs={"class": "views-field views-field-field-locatie-thoroughfare"}).text.encode('utf-8'),
"plaats": adres.find('td', attrs={"class": "views-field views-field-field-locatie-locality"}).text.encode('utf-8')
}
adresArr.append(adresObject)
for adres in content.findAll('tr', attrs={"class": "odd clickable-row active"}):
adresObject = {
"postcode": adres.find('td', attrs={"class": "views-field views-field-field-locatie-postal-code"}).text.encode('utf-8'),
"naam": adres.find('td', attrs={"class": "views-field views-field-field-locatie-thoroughfare"}).text.encode('utf-8'),
"plaats": adres.find('td', attrs={"class": "views-field views-field-field-locatie-locality"}).text.encode('utf-8')
}
adresArr.append(adresObject)
pagina = x
with open('adresData.json', 'w') as outfile:
json.dump(adresArr, outfile)
我收到以下[=23=]错误:字节类型的对象不是json可序列化
如果我打印数组本身,它看起来没问题。但我一直坚持将它写入 json 文件。
我做错了什么?
这是我第一次在 python 中编码(并没有很多编码经验)所以请让你的答案清楚易懂:)
提前致谢
要解决此问题...您只需转换元素的数据类型
这是先前回答过的相同问题的参考
TypeError: Object of type 'bytes' is not JSON serializable
这可能会有所帮助
在这样的行中:
"postcode": adres.find('td', attrs={"class": "views-field views-field-field-locatie-postal-code"}).text.encode('utf-8')
.text
结果应该已经是一个字符串; .encode('utf-8')
使其成为 json 库抱怨的 bytes
对象。所以把它关掉:adres.find('td', attrs={"class": "views-field views-field-field-locatie-postal-code"}).text
.
背景信息:字节是信息的原始单位;字符串是我们表示文本的方式。我们en编码一个字符串来生成用于存储的字节;我们 de 编码字节以获取字符串。但是 JSON 已经设计为可以处理字符串 - 库将在实际写入磁盘时为您处理文件编码。
我正在尝试使用以下代码将数据 'scraped' 从站点写入 json 输出文件:
from bs4 import BeautifulSoup
import requests
import json
path = ["https://www.test.be?page=,https://www.test2.be?page="]
adresArr = []
for i in path:
pagina = 0;
for x in range(0, 4):
url = i + str(pagina)
response = requests.get(url, timeout=5)
content = BeautifulSoup(response.content, "html.parser")
for adres in content.findAll('tr', attrs={"class": "odd clickable-row"}):
adresObject = {
"postcode": adres.find('td', attrs={"class": "views-field views-field-field-locatie-postal-code"}).text.encode('utf-8'),
"naam": adres.find('td', attrs={"class": "views-field views-field-field-locatie-thoroughfare"}).text.encode('utf-8'),
"plaats": adres.find('td', attrs={"class": "views-field views-field-field-locatie-locality"}).text.encode('utf-8')
}
adresArr.append(adresObject)
for adres in content.findAll('tr', attrs={"class": "odd clickable-row active"}):
adresObject = {
"postcode": adres.find('td', attrs={"class": "views-field views-field-field-locatie-postal-code"}).text.encode('utf-8'),
"naam": adres.find('td', attrs={"class": "views-field views-field-field-locatie-thoroughfare"}).text.encode('utf-8'),
"plaats": adres.find('td', attrs={"class": "views-field views-field-field-locatie-locality"}).text.encode('utf-8')
}
adresArr.append(adresObject)
pagina = x
with open('adresData.json', 'w') as outfile:
json.dump(adresArr, outfile)
我收到以下[=23=]错误:字节类型的对象不是json可序列化
如果我打印数组本身,它看起来没问题。但我一直坚持将它写入 json 文件。 我做错了什么?
这是我第一次在 python 中编码(并没有很多编码经验)所以请让你的答案清楚易懂:)
提前致谢
要解决此问题...您只需转换元素的数据类型 这是先前回答过的相同问题的参考
TypeError: Object of type 'bytes' is not JSON serializable
这可能会有所帮助
在这样的行中:
"postcode": adres.find('td', attrs={"class": "views-field views-field-field-locatie-postal-code"}).text.encode('utf-8')
.text
结果应该已经是一个字符串; .encode('utf-8')
使其成为 json 库抱怨的 bytes
对象。所以把它关掉:adres.find('td', attrs={"class": "views-field views-field-field-locatie-postal-code"}).text
.
背景信息:字节是信息的原始单位;字符串是我们表示文本的方式。我们en编码一个字符串来生成用于存储的字节;我们 de 编码字节以获取字符串。但是 JSON 已经设计为可以处理字符串 - 库将在实际写入磁盘时为您处理文件编码。