我正在尝试从 map 上的每个弹出窗口获取数据。我过去使用过 beautifulsoup,但这是第一次从交互式 map 获取数据。
任何朝着正确方向的插入都是有帮助的。到目前为止我正在返回空白。 这是我所拥有的,它并不重要......
from bs4 import BeautifulSoup as bs4
import requests
url = 'https://www.oaklandconduit.com/development_map'
r = requests.get(url).text
soup = bs4(r, "html.parser")
address = soup.find_all("div", {"class": "leaflet-pane leaflet-marker-pane"})
已更新
根据建议,我使用下面的脚本使用 re
解析 javascript 内容。但是加载到 json 中会返回错误
import requests, re
url = 'https://ebrrd.nationbuilder.com/themes/3/58597f55b92871671e000000/0/attachments/14822603711537993218/default/mapscript.js'
r = requests.get(url).content
content = re.findall(r'var.*?=\s*(.*?);', r, re.DOTALL | re.MULTILINE)[2]
json_content = json.loads(content)
最佳答案
交互式 map 是通过 JavaScript 加载和驱动的,因此,使用 requests
库不足以获取您想要的数据,因为它只能为您提供初始响应(在本例为 HTML 源代码)。
如果您查看页面的源代码(在 Chrome 上:view-source:https://www.oaklandconduit.com/development_map
),您会看到有一个空的 div,如下所示:
<div id='map'></div>
这是 map 的占位符 div。
您将需要使用一种允许加载 map 并以编程方式与其交互的方法。 Selenium可以为您执行此操作,但会比请求
慢得多,因为它必须通过启动以编程方式驱动的浏览器来允许这种交互性。
关于python - 从交互式 map 中抓取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53112123/