BeautifulSoup odnalezienie listy dwuwymiarowej

0

Hej,
Mógłby ktoś mnie trochę naprowadzić jak dostać się do danych wypluwanych przez BeautifulSoup? Może coś źle wpisuje w google i przeoczam w dokumentacji :).
Z poniższego kodu:

import requests
from bs4 import BeautifulSoup
html = requests.get(input("Insert your link: "))
soup = BeautifulSoup(html.text, 'html.parser')
print(soup)

Dostaje takie wyjście:

(... inne dane...)
<script type="text/javascript">//<![CDATA[
var g_mapperData = {
3518: {
0: { count: 13, coords: [[41.4,42.8],[41.4,45.2],[41.4,45.8],[41.6,46.2],[41.8,43.4],[41.8,43.6],[42.4,45.2],[42.6,43.2],[42.6,44.2],[43,41.8],[43.2,41.4],[43.8,44.4],[44,44.6]] }
}
};
var myMapper = new Mapper({parent: 'k6b43j6b'});
WH.gE(WH.ge('locations'), 'a')[0].onclick();
//]]></script>
(...inne dane...)

Z innej podstrony natomiast coś takiego:

(...inne dane...)
<script type="text/javascript">//<![CDATA[
var g_mapperData = {
3518: {
0: { count: 11, coords: [[25.4,60.4],[25.6,60.8],[26,59.4],[26.2,61.6],[26.4,58.2],[26.4,60],[26.6,59.8],[26.6,60.8],[27,58],[27,59.2],[27,61.8]] }
}
};
var myMapper = new Mapper({parent: 'k6b43j6b'});
WH.gE(WH.ge('locations'), 'a')[0].onclick();
//]]></script>
(...inne dane...)

Pewnie nie jest to ciężkie, ale gdzieś mi chyba już mózg nie robi po świętach :)

Dodam że dane nie są dynamiczne (zmieniane w trakcie 'operacji na stronie'), są za każdym pobraniem takie same.

@Edit:
Nie napisałem co chcę uzyskać... Chodzi mi konkretniej o zawartość coords:
coords: [[41.4,42.8],[41.4,45.2],[41.4,45.8],[41.6,46.2],[41.8,43.4],[41.8,43.6],[42.4,45.2],[42.6,43.2],[42.6,44.2],[43,41.8],[43.2,41.4],[43.8,44.4],[44,44.6]]
Chodzi mi o te listę dwuwymiarową.

0

Nie jestem pewny czy dobrze rozumiem, ale jeśli chcesz dostać kod strony na której jest JS to musisz to zrobić za pomocą selenium. Selenium wyrenderuje ci HTML i wtedy w BS będziesz mógł po klasie znaleźć to co chcesz. Chyba ze nie zrozumiałem o co pytasz :P

0
data = json.loads(soup.find('script', type='text/javascript').text)
print (data ['coords'])

Z głowy pisane, ale chyba tak to powinno być

0

Jakie Chcesz dane, tak, na przykład, można zacząć z tekstem:

import requests, bs4

res = requests.get('https://lion137.blogspot.com/2017/08/new-repository-python-graphs.html')

res.raise_for_status()

noStarchSoup = bs4.BeautifulSoup(res.text)

print(noStarchSoup.text)

Więcej, tutaj: https://automatetheboringstuff.com/chapter11/

0

Dzięki za podpowiedzi :D. Spróbuję to jakoś złożyć do kupy ^^

1 użytkowników online, w tym zalogowanych: 0, gości: 1