Извлечь значения из javascript источника в Python BeautifulSoup - PullRequest
0 голосов
/ 21 апреля 2020

Я довольно новичок в поиске в сети, и мне было интересно, можно ли извлечь нужную информацию из приложения javascript. В настоящее время я использую beautifulsoup в python и мне интересны эти выходные данные синтаксического анализатора html:

<p><script>
var acct = '488'; var loc = ''; var cat = ''; var stylesheet=''; var hideLastnames = true;
var jsHost = (("https:" == document.location.protocol) ? "https://" : "http://");
document.write("<scr"+"ipt src='"+jsHost+"ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js' type='text/javascript'></scr"+"ipt>");
document.write("<scr"+"ipt>var jQuery = jQuery.noConflict(true);</scr"+"ipt>");
document.write("<scr"+"ipt src='"+jsHost+"www.groupexpro.com/schedule/embed/schedule_embed_responsive.js.php?a="+acct+"' type='text/javascript'></scr"+"ipt>");
</script></p>

На реальном веб-сайте (https://recreation.gocrimson.com/fitness/schedules) это выглядит как это . В идеале я хотел бы хранить json со всей информацией, указанной в таблице. Кто-нибудь имел опыт делать что-то подобное?

1 Ответ

1 голос
/ 22 апреля 2020

https://recreation.gocrimson.com/fitness/schedules запрашивает другой URL-адрес для получения данных расписания в формате JSONP.

URL:https://www.groupexpro.com/schedule/embed/json.php?schedule&instructor_id=true&format=jsonp&a=488&location=&category=&start=1587380400&end=1587898800

Попытайтесь понять URL-адрес и измените его для своей цели.

Пример

from bs4 import BeautifulSoup
import requests
import json


headers ={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0"}

page=requests.get("https://www.groupexpro.com/schedule/embed/json.php?schedule&instructor_id=true&format=jsonp&a=488",headers=headers)

#Extract json from jsonp
jsondata='{'+page.text.split('{')[1].split('}')[0]+'}'

#can also be loaded into python dict using
data=json.loads(jsondata)

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