python - 从交互式 map 中抓取数据

标签 python html web-scraping beautifulsoup

我正在尝试从 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/

相关文章:

java - JSoup,如何从动态 <a href> 标签返回数据

python - 如何以正确的格式在文本文件中写入两个 numpy 数组?

python - 如何创建 Django OneToMany 关系?

python - 使用弹出窗口获取用户输入并在 OpenERP 中的按钮功能中使用这些输入

javascript - 如何在浏览器检查中获取 Ext js 元素 id 或 itemId 值

html - 奇怪的 IE6/IE 布局错误

python - 简单的网络爬虫我需要消除数组中存在的重复 URL

python - 在 session 中发出后续 POST 请求不起作用 - 网络抓取

python - 无法在 sympy 中绘制 d(e^-|t|)/dt 的傅立叶变换

javascript - 简单代码既不能在 jsfiddle 也不能在 codepen 上运行,而是在我的浏览器 (Chrome) 上运行?