2016-12-16 3 views
1

Я обычно использую Beautiful Soup для разбора html, который мне нужен, но натолкнулся на некоторый Javascript, который я хотел бы получить от here.Разбор Javascript в Python

<script> 
function Model(){ 
    this.players = [{".....data......:""}];...etc 

Я пытался загрузить его, как ...

import json 
scrape_url = "https://swishanalytics.com/optimus/nba/daily-fantasy-projections?date=2016-12-15" 

result = json.loads(scrape_url) 

Но я получаю "Нет Json не может быть расшифрован". Не знаете, как это сделать.

+1

Как говорит ваш тег, вы знаете, вы должны использовать 'BeautifulSoup', но тогда почему ваш код с помощью' json.loads (URL) '? Пожалуйста, проверьте документ 'json', он не делает то, что, по вашему мнению, –

+0

, поэтому вы хотите извлечь данные из сценария? Сначала вам нужно изолировать его I.E. получите только строку '{" ..... data ......: "}', затем используйте это с 'json.loads' –

+0

@MoinuddinQuadri, я не мог заставить его работать с bs4 –

ответ

8

Вы можете извлечь JSON из произвольного текста с jsonfinder библиотеки:

from jsonfinder import jsonfinder 
import requests 

scrape_url = "https://swishanalytics.com/optimus/nba/daily-fantasy-projections?date=2016-12-15" 
content = requests.get(scrape_url).text 
for _, __, obj in jsonfinder(content, json_only=True): 
    if (obj and 
      isinstance(obj, list) and 
      isinstance(obj[0], dict) and 
      {'player_id', 'event_id', 'name'}.issubset(obj[0]) 
      ): 
     break 
else: 
    raise ValueError('data not found') 

# Now you can use obj 
print(len(obj)) 
print(obj[0]) 
+0

Работает очень хорошо :) – Nabin