2016-05-20 7 views
1

なぜこの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]: // 

感謝を!

答えて

1

エラーを見て、str(soup)のようなコードエラーがかなり明白な理由は、</a></a>が無効なjsonを持っていることを意味します。

それはあなたがそれが.contentだろうが、正しい解決策はただ.json呼び出すことです何でそれを呼び出した場合、Beautifulsoupオブジェクトにjson.loadsを使用しようとして全く意味がありません。

page_json_dict = r.json() 
+0

私はプログラミングではまだまだ新しく、時にはうまくいくことがあるときには最適な解決策ではないかもしれません。それにもかかわらず、それはうまくいったので、私は援助に感謝します。 :) – Zach

+0

@ザシズム、ゼロの敵意がある、それは本当にスープに変換してjsonに変換する意味がなく、トレースバックを見れば 'char 18923 - 18931'を見ることができます。あなたがエラーを引き起こしたものを表示する 'print(str(スープ[18923:18931]))'のようになります。 –

+0

その場合でも私は謝罪します。私はスープを使用していました。これは、私がリクエストをどのように学んだのか、それがスクリプトの他の理由で使用されているからです(ここには示されていません)。しかし、ああ、私はそれを知らない/考えていないことを参照してください。それでも、私はダブルエンドのアンカータグが無効なjsonを意味することに気づいたとは思わない - その理由は何ですか?そして、なぜソリューションはそれを変えるのでしょうか? – Zach