#python #beautifulsoup
#питон #прекрасный суп
Вопрос:
у меня есть что-то подобное:
(async () => {
await import("https://s-gr.cdngr.pl/assets/gratka/v0.40.7/dist/js/Map.js");
Map.init('#item-map', {
gratkaMapsUrl: 'https://map.api.gratka.it',
assetsUrl: 'https://s-gr.cdngr.pl/assets/gratka/v0.40.7/dist/',
locationApiHost: 'https://locations.api.gratka.it/locations/v1',
apiUrl: 'https://gratka.api.gratka.it/gratka/v2',
eventType: 'click',
statisticsType: 'show_map',
locationParams: {"lokalizacja_ulica":"aleja Marsz. Ju00f3zefa Piu0142sudskiego","lokalizacja_szerokosc-geograficzna-y":52.231069627971,"lokalizacja_region":"mazowieckie","lokalizacja_powiat":"Warszawa","lokalizacja_miejscowosc":"Warszawa","lokalizacja_kraj":"Polska","lokalizacja_gmina":"Warszawa","lokalizacja_dlugosc-geograficzna-x":21.2497334550424},
offersId: [18702037]
});
})();
Я ищу метод для извлечения этих параметров: «lokalizacja_ulica», «lokalizacja_szerokosc-geograficzna-y» и «lokalizacja_dlugosc-geograficzna-x». Есть какие-нибудь идеи? Я новичок в python: <
Ответ №1:
Вы не можете извлекать информацию из js с помощью bs4 afaik. Однако вы можете использовать регулярное выражение.
from bs4 import BeautifulSoup
import json
import re
soup = BeautifulSoup(<html text>)
script = soup.find('script').string
match = re.search(r'(?<=locationParams: ). (?=,n)', script, re.M).group(0)
data = json.loads(match)
(?<=locationParams: ). (?=,n) шаблон ищет все, что имеет «locationParams: » перед и фигурную скобку, за которой следует символ новой строки. Затем вы можете передать эту строку в json.loads(), который превращает ее в словарь python.