Найти - Пользователи
Полная версия: Строка как код на Python
Начало » Python для новичков » Строка как код на Python
1 2
py.user.next
Да можно и json сломать, просунув туда что-нибудь, но это уже не простой eval(), а нужно чтобы был баг в парсере json'а, а это куда реже встречается.
BearPro
Не ожидал такого обсуждения вокруг своего ламерского вопроса.
Про 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)
Не совсем понимаю, какой запятой ему не хватает, так что прошу вашей помощи. Снова.
FishHook
У вас невалидный json, двойные кавычки внутри строк надо заменить на одинарные.
{“html”:"\\n\\t\\t\\t\\t<div id=\\"comment_76896290\\"}
что должен подумать парсер, когда дойдет до этой кавычки? Разумеется, что строка кончилась, а за ней должна быть запятая и новый ключ либо закрывающая скобка.
BearPro
FishHook
У вас невалидный json, двойные кавычки внутри строк надо заменить на одинарные.
Так там же стоит \", что вроде как не должно пониматься именно как символ ", а не как окончание строки.
Этот json я получаю в ответ на post запрос, при чём почему-то не response.json, а в response.content
Могу немного дополнить: вся эта фигня (которую я делаю) должна просто собрать все данные со страницы комментариев к посту на pikabu.ru
Проблема в том, что если комментариев более 300 (пример: http://pikabu.ru/story/kak_pravilno_kachat_press_4673443#comments ), то нужно ещё нажимать кнопку “показать ещё n комментариев” (в самом низу). Можете сами посмотреть, куда и какой запрос при этом посылается, и что возвращается.
Таким образом, я не могу повлиять на получаемый json, могу лишь работать с ответом. Как мне эффективно заменить двойные кавычки внутри строк на одинарные?
py.user.next
Это json, но он не загружается, потому что невалидный. Скорее всего, ты его неправильно нам передал, хотя бывают и на сайтах косяки такие (неправильные страницы, неправильные данные).

BearPro
Можете сами посмотреть, куда и какой запрос при этом посылается, и что возвращается.
Ну, посмотрели через HttpFox - всё нормально загружается, нормальный json.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB