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. J\u00f3zefa Pi\u0142sudskiego","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新手:<
解决方案
您无法使用 bs4 afaik 从 js 中提取信息。你可以使用正则表达式。
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 字典。
推荐阅读
- html - 在我的网站导航栏中,可点击的部分比我想要的要多。他们为什么在那里?
- javascript - 如何将 DateTime 字符串格式转换为其他 DateTime?
- logging - Serilog:如何在浓缩器中记录对象?
- java - Spring 集成:Dispatcher 没有频道订阅者
- python - 如何在 python 中使用多个进程来实现连续工作负载
- javascript - Selenium - 单击尚未生成的按钮
- android - React Native Sqlite 存储:未执行 db.transaction() 函数
- c# - c#图表y轴统一缩放
- sql-server - REPLACE 函数在用户定义函数中不起作用
- python - 如何使用熊猫按字母顺序将数据分类?