【发布时间】:2017-04-03 21:48:49
【问题描述】:
我希望解析并保存嵌入在 html 代码中的 json 文件的内容。但是,当我隔离相关字符串并尝试使用 json 包加载它时,我收到错误 JSONDecodeError: Extra data 并且我不确定是什么原因造成的。
有人建议相关代码实际上可能包含多个字典,这可能会出现问题,但如果这是真的,我不清楚如何进行。下面提供了我的代码。任何建议都非常感谢!
from bs4 import BeautifulSoup
import urllib.request
from urllib.request import HTTPError
import csv
import json
import re
def left(s, amount):
return s[:amount]
def right(s, amount):
return s[-amount:]
def mid(s, offset, amount):
return s[offset:offset+amount]
url= "url"
from urllib.request import Request, urlopen
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
try:
s = urlopen(req,timeout=200).read()
except urllib.request.HTTPError as e:
print(str(e))
soup = BeautifulSoup(s, "lxml")
tables=soup.find_all("script")
for i in range(0,len(tables)):
if str(tables[i]).find("TimeLine.init")>-1:
dat=str(tables[i]).splitlines()
for tbl in dat:
if str(tbl).find("TimeLine.init")>-1:
s=str(tbl).strip()
j=json.loads(s)
【问题讨论】:
-
如果它包含多个字典,您需要一次解析它们。如果不进行一些巧妙的解析,很难将字符串分解成与之对应的片段。每次都失败吗?它失败的字符串是什么?
s在调用json.loads之前是什么样子的? -
s 很长 - 大约 50k 个字符,因此无法完整发布。虽然会添加提取物
-
虽然它并不直接致力于解决您的技术问题。解析网站内容以获取内部数据很少是一个好主意。主要是因为你are not allowed to do so,但也因为它可能会改变。
-
@dahrens,怎么会这样?这些条款的第 7 点允许他出于个人、非商业用途这样做。内容可能会改变是网络的本质。
-
“任何建议”过于宽泛。
标签: python json web-scraping beautifulsoup