Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 9, 2016 10:43:40

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Строка как код на Python

Да можно и json сломать, просунув туда что-нибудь, но это уже не простой eval(), а нужно чтобы был баг в парсере json'а, а это куда реже встречается.



Офлайн

#2 Дек. 9, 2016 15:53:33

BearPro
Зарегистрирован: 2015-09-09
Сообщения: 46
Репутация: +  0  -
Профиль   Адрес электронной почты  

Строка как код на Python

Не ожидал такого обсуждения вокруг своего ламерского вопроса.
Про json понял, попробовал использовать. Вроде как должен работать, но ловлю ошибку.
Для того, что бы было совсем понятно, приведу фрагмент своей программы:
Опущу процесс получения строки, но в итоге мне нужно десериализовать ебическую небольшую строку, которую будет точно неудобно показывать вам тут, так что вот ссылка на неё в моём OneDrive: https://1drv.ms/t/s!AsP0diW_mlpIi6tzmjrIT18VA1_4Ew #обратите внимание, сслку нужно скопировать полностью
Ну так, вот когда я пытаюсь json.loads(string), то получаю трейсбек:

 Traceback (most recent call last):
  File "C:\Users\BearPro\documents\visual studio 2015\Projects\FreeShow\FreeShow\Parcer\Parcer.py", line 107, in <module>
    (commentList, commentParced) = generateComments()
  File "C:\Users\BearPro\documents\visual studio 2015\Projects\FreeShow\FreeShow\Parcer\Parcer.py", line 101, in generateComments
    getNextCommentsPage()
  File "C:\Users\BearPro\documents\visual studio 2015\Projects\FreeShow\FreeShow\Parcer\Parcer.py", line 97, in getNextCommentsPage
    commentData = json.loads(postContent)
  File "C:\Program Files (x86)\Python35-32\lib\json\__init__.py", line 319, in loads
    return _default_decoder.decode(s)
  File "C:\Program Files (x86)\Python35-32\lib\json\decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Program Files (x86)\Python35-32\lib\json\decoder.py", line 355, in raw_decode
    obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting ',' delimiter: line 1 column 141 (char 140)
Не совсем понимаю, какой запятой ему не хватает, так что прошу вашей помощи. Снова.

Отредактировано BearPro (Дек. 9, 2016 15:54:29)

Офлайн

#3 Дек. 9, 2016 16:19:16

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Строка как код на Python

У вас невалидный json, двойные кавычки внутри строк надо заменить на одинарные.

{“html”:"\\n\\t\\t\\t\\t<div id=\\"comment_76896290\\"}
что должен подумать парсер, когда дойдет до этой кавычки? Разумеется, что строка кончилась, а за ней должна быть запятая и новый ключ либо закрывающая скобка.



Офлайн

#4 Дек. 9, 2016 20:36:20

BearPro
Зарегистрирован: 2015-09-09
Сообщения: 46
Репутация: +  0  -
Профиль   Адрес электронной почты  

Строка как код на Python

FishHook
У вас невалидный json, двойные кавычки внутри строк надо заменить на одинарные.
Так там же стоит \", что вроде как не должно пониматься именно как символ ", а не как окончание строки.
Этот json я получаю в ответ на post запрос, при чём почему-то не response.json, а в response.content
Могу немного дополнить: вся эта фигня (которую я делаю) должна просто собрать все данные со страницы комментариев к посту на pikabu.ru
Проблема в том, что если комментариев более 300 (пример: http://pikabu.ru/story/kak_pravilno_kachat_press_4673443#comments ), то нужно ещё нажимать кнопку “показать ещё n комментариев” (в самом низу). Можете сами посмотреть, куда и какой запрос при этом посылается, и что возвращается.
Таким образом, я не могу повлиять на получаемый json, могу лишь работать с ответом. Как мне эффективно заменить двойные кавычки внутри строк на одинарные?

Отредактировано BearPro (Дек. 9, 2016 20:37:49)

Офлайн

#5 Дек. 10, 2016 03:15:45

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Строка как код на Python

Это json, но он не загружается, потому что невалидный. Скорее всего, ты его неправильно нам передал, хотя бывают и на сайтах косяки такие (неправильные страницы, неправильные данные).

BearPro
Можете сами посмотреть, куда и какой запрос при этом посылается, и что возвращается.
Ну, посмотрели через HttpFox - всё нормально загружается, нормальный json.



Отредактировано py.user.next (Дек. 10, 2016 03:25:57)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version