【发布时间】:2020-02-03 12:32:32
【问题描述】:
我编写了以下代码来获取地图中所有蓝色标记的位置。
from bs4 import BeautifulSoup
from requests_html import HTMLSession
session = HTMLSession()
url="https://emf2.bundesnetzagentur.de/karte/Default.aspx?lat=52.4107723&lon=14.2930953&zoom=14"
r = session.get(url)
r.html.render(sleep = 3)
data = r.html.html
soup=BeautifulSoup(data,'html.parser')
BlueTriangles = soup.find_all(src="images/funk_hf.png")
for Triangle in BlueTriangles[1:]:
TriangleStyle = Triangle['style']
PixelPosition = TriangleStyle.split('transform: translate3d(')[1].split(', 0px); z')[0]
print(PixelPosition)
r.session.close()
当我使用网络浏览器打开 URL 时,我看到每个蓝色标记都有一个唯一的 ID,它显示在鼠标悬停时的工具提示中:
工具提示的 html 代码似乎是由鼠标悬停事件触发的:
有没有办法从工具提示中抓取 ID?我想知道是否可以使用渲染的脚本参数来强制鼠标悬停事件。但是我找不到将它集成到代码中的方法:
$('#foo').trigger('mouseover');
【问题讨论】:
-
我建议使用crummy.com/software/BeautifulSoup/bs4/doc 而不是您当前使用的字符串函数。使用 Beautifulsoup,您可以轻松地从页面中提取您想要的内容。
-
感谢您的建议。我删除了字符串函数以使其更清晰,并专注于回答帖子中的问题,该问题仍未得到解答。
-
嗯,看起来整个地图都是用Javascript渲染的。所以我相信你必须使用像 Scrapy 或 Selenium 这样的无头浏览器才能执行 Javascript。即使那样,提取所有 id 可能也很困难。
-
requests_html 正在渲染地图的 Javascript。只有工具提示似乎没有在初始页面加载时呈现。
标签: javascript python web-scraping python-requests-html