Python 无法使用json、请求、美化来确定ValueError组:ValueError(errmsg(“额外数据”),s,end,len)

Python 无法使用json、请求、美化来确定ValueError组:ValueError(errmsg(“额外数据”),s,end,len),python,json,web-scraping,beautifulsoup,python-requests,Python,Json,Web Scraping,Beautifulsoup,Python Requests,我很难弄清楚为什么会出现这个值错误。。。为了提供一些上下文,我使用请求、BeautifulSoup和python中的json删除了一个站点json数据 我不知道为什么这个URL不起作用。我已经用其他几个URL完成了,没有问题。甚至“第2页”(page 2)也被成功地刮取并存储在字典中 我已经包括了iPython输入/输出(有问题的URL和成功的第3页和第2页各一个): [1]中的:url='1〕http://hypem.com/playlist/loved/Bigdirtyian/json/3/

我很难弄清楚为什么会出现这个值错误。。。为了提供一些上下文,我使用请求、BeautifulSoup和python中的json删除了一个站点json数据

我不知道为什么这个URL不起作用。我已经用其他几个URL完成了,没有问题。甚至“第2页”(page 2)也被成功地刮取并存储在字典中

我已经包括了iPython输入/输出(有问题的URL和成功的第3页和第2页各一个):

[1]中的
:url='1〕http://hypem.com/playlist/loved/Bigdirtyian/json/3/data.js'
在[2]中:导入json
在[3]中:导入请求
在[4]中:从bs4导入
在[5]中:r=requests.get(url)
在[6]中:content=r.content
[7]中:soup=beautifulsou(内容为'html.parser')
在[8]中:page_json_dict=json.loads(str(soup))
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
---->1页_json_dict=json.loads(str(soup))
/加载中的Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/\uuuu init\uuuuuuuuuuu.pyc(s、编码、cls、对象钩、解析浮点数、解析int、解析常量、对象对钩、**kw)
336 parse_int为无,parse_float为无且
337 parse_常量为None且对象_pairs_hook为None且非kw):
-->338返回\u默认\u解码器。解码
339如果cls为无:
340 cls=JSONDecoder
/解码中的Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.pyc(self,s,_w)
367 end=_w(s,end).end()
368如果结束!=(s)
-->369提升值错误(errmsg(“额外数据”,s,end,len)
370返回obj
371
ValueError:额外数据:第1行第18924列-第1行第18932列(字符18923-18931)
在[9]:url2='1'中http://hypem.com/playlist/loved/Bigdirtyian/json/2/data.js'
在[10]中:r2=requests.get(url2)
在[11]中:content2=r2.content
[12]中:soup2=beautifulsou(content2,'html.parser')
在[13]中:page_json_dict2=json.loads(str(soup2))
在[14]中://

提前感谢

代码错误的原因非常明显,如果您查看错误以及
str(soup)
的外观,您可以看到
添加在末尾,这意味着您的json无效

如果您在Beautifulsoup对象上调用json.loads是毫无意义的,但正确的解决方案是调用.json

page_json_dict = r.json()

我对编程还是相当陌生的,有时当我得到一些东西来工作时,我会用它来运行,即使它可能不是最佳的解决方案。不管怎样,这是有效的,所以我感谢你的帮助,尽管它带来了不必要的敌意。。。但是谢谢你!:)@zacheism,没有敌意,转换成soup然后再转换成json真的没有意义,而且如果你查看回溯,你可以看到
char 18923-18931
,它告诉你问题到底在哪里,所以如果你
print(str(soup[18923:18931]))
这将向您显示错误的原因。如果是这样,我向您道歉。我之所以使用soup,是因为这是我学习请求的一种方式,也是因为它在脚本中用于其他原因(此处未显示)。但是啊,看,我不知道/想这么做。即使如此,我也不认为我会意识到双端锚标记意味着无效的json——这是什么原因?还有,为什么解决方案会改变这一点?@zacheism,bs4正在添加锚定标记,为什么我不知道,每个解析器可以对源代码进行不同的解析。如果只使用从请求返回的内容,则不会有添加任何错误数据的危险。该格式是无效的,就好像您在想,json应该为dict结尾的锚点返回什么?右括号。是的,这很有道理。。。。我想这很明显;)再次感谢你的教育!
page_json_dict = r.json()