Как извлечь данные из JavaScript в формате JSON? - PullRequest
1 голос
/ 24 мая 2019

У меня проблемы с извлечением данных Сначала мне нужно извлечь заголовок поста и опубликованную дату поста. вот URL.

URL: https://cheddar.com/media/safety-concerns-over-teslas-autopilot-from-consumer-reports-as-wall-street-turns-bearish

Внутри view-source есть скрипт в формате json, который содержит данные, которые мне нужны

Как-то так, я обрезаю другой текст, чтобы уменьшить пространство

<script>
      window.__RELAY_STORE__ = {"public_at":"2019-05-22T11:02:43- 
04:00","updated_at":"2019-05-22T15:25:20- 
04:00","thumbnail_attribution":null,"body":null,"title":"Safety Concerns 
Over Tesla's Autopilot from Consumer Reports as Wall Street Turns Bearish"
</script>

Мне просто нужно получить «public_at» и «title»

И то, что я пробовал, это,

data = response.xpath("//script[contains(., 'window.__RELAY_STORE__')]/text()")
#Locate the script

datatxt = data.extract_first()
#Extract the script

start = datatxt.find('client:') - 2
end = datatxt.find('window.__REDUX_STATE__')
# find start and end of data 

json_string = datatxt[start:end]

но когда я загружаю его или конвертирую в словарь Python

 data = json.loads(json_string)

У меня ошибка примерно такая

Extra data: line 1 column 27284 (char 27283)

Есть идеи, как мне получить эти данные, пожалуйста?

1 Ответ

2 голосов
/ 24 мая 2019

Попробуйте получить данные следующим образом:

txt = response.xpath("//script[contains(., 'window.__RELAY_STORE__')]/text()").re_first('window.__RELAY_STORE__ = (.*);')

Это будет обрезать имя переменной js и последний ;. Итак, когда я звоню json.loads(txt), это дает мне действительный JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...