У меня возникли проблемы с выяснением, почему я получаю этот ValueError ... Чтобы дать некоторый контекст, я очищаю данные json сайтов, используя запросы, BeautifulSoup и json с помощью python.Проблема с вычислением ValueError с json, запросы, BeautifulSoup: ValueError (errmsg («Дополнительные данные», s, end, len (s)))
Я не уверен, почему он не работает для этого URL-адреса. Я сделал это с несколькими другими URL-адресами без проблем. Даже «страница 2» (http://hypem.com/playlist/loved/Bigdirtyian/json/2/data.js) успешно очищается и сохраняется в словаре.
Я включил IPython ввода/вывода (как проблемный URL и успешным - страница 3 & 2, соотв.):
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
@zacheism, есть нулевая враждебность, на самом деле не имеет смысла конвертировать в суп, а затем в json, также если вы посмотрите на traceback, вы можете увидеть 'char 18923 - 18931', который сообщает вам, где именно проблема ложь, поэтому, если вы напечатаете (str (суп [18923: 18931])), который покажет вам причину ошибки. –
ну в этом случае извините. Я использовал суп, потому что это как-то, как я изучил запросы и потому, что он используется по другим причинам в сценарии (не показано здесь). Но, похоже, я не знал/не думал об этом. И даже так, я не думаю, что я бы понял, что тег привязки с двойным концом будет означать недопустимый json - в чем причина? А также, почему решение изменилось? – Zach