なぜこのValueErrorを取得しているのかわかりません...いくつかのコンテキストを与えるために、私はサイトjsonデータをリクエスト、BeautifulSoupとjsonを使ってPythonで削っています。json、requests、BeautifulSoupでValueErrorを調べる際に問題が発生しました:ValueError(errmsg( "Extra data"、s、end、len(s))
なぜこのURLで動作しないのかわかりません。私は何の問題もなく他のいくつかのURLでそれをやった。 「ページ2」(http://hypem.com/playlist/loved/Bigdirtyian/json/2/data.js)でも正常に掻き取られ、辞書に格納されます。
私はiPython入力/出力含めました(問題のあるURLの両方で成功1 - 3ページ& 2、RESPを。):事前に
In [1]: url = 'http://hypem.com/playlist/loved/Bigdirtyian/json/3/data.js'
In [2]: import json
In [3]: import requests
In [4]: from bs4 import BeautifulSoup
In [5]: r = requests.get(url)
In [6]: content = r.content
In [7]: soup = BeautifulSoup(content, 'html.parser')
In [8]: page_json_dict = json.loads(str(soup))
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-8-18cc0e11884e> in <module>()
----> 1 page_json_dict = json.loads(str(soup))
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.pyc in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
336 parse_int is None and parse_float is None and
337 parse_constant is None and object_pairs_hook is None and not kw):
--> 338 return _default_decoder.decode(s)
339 if cls is None:
340 cls = JSONDecoder
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.pyc in decode(self, s, _w)
367 end = _w(s, end).end()
368 if end != len(s):
--> 369 raise ValueError(errmsg("Extra data", s, end, len(s)))
370 return obj
371
ValueError: Extra data: line 1 column 18924 - line 1 column 18932 (char 18923 - 18931)
In [9]: url2 = 'http://hypem.com/playlist/loved/Bigdirtyian/json/2/data.js'
In [10]: r2 = requests.get(url2)
In [11]: content2 = r2.content
In [12]: soup2 = BeautifulSoup(content2, 'html.parser')
In [13]: page_json_dict2 = json.loads(str(soup2))
In [14]: //
感謝を!
私はプログラミングではまだまだ新しく、時にはうまくいくことがあるときには最適な解決策ではないかもしれません。それにもかかわらず、それはうまくいったので、私は援助に感謝します。 :) – Zach
@ザシズム、ゼロの敵意がある、それは本当にスープに変換してjsonに変換する意味がなく、トレースバックを見れば 'char 18923 - 18931'を見ることができます。あなたがエラーを引き起こしたものを表示する 'print(str(スープ[18923:18931]))'のようになります。 –
その場合でも私は謝罪します。私はスープを使用していました。これは、私がリクエストをどのように学んだのか、それがスクリプトの他の理由で使用されているからです(ここには示されていません)。しかし、ああ、私はそれを知らない/考えていないことを参照してください。それでも、私はダブルエンドのアンカータグが無効なjsonを意味することに気づいたとは思わない - その理由は何ですか?そして、なぜソリューションはそれを変えるのでしょうか? – Zach