簡體   English   中英

如何從使用 javascript 生成的工具提示中抓取文本

[英]How to scrape text from tooltips generated with javascript

我編寫了以下代碼來獲取地圖中所有藍色標記的位置。

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()

當我使用 Web 瀏覽器打開 URL 時,我看到每個藍色標記都有一個唯一的 ID,顯示在鼠標懸停時的工具提示中:

在此處輸入圖片說明

工具提示的 html 代碼似乎是由鼠標懸停事件觸發呈現的:

在此處輸入圖片說明

有沒有辦法從工具提示中抓取 ID? 我想知道是否可以使用 render 的腳本參數來強制鼠標懸停事件。 但是我找不到將它集成到代碼中的方法:

$('#foo').trigger('mouseover');

地圖上的點通過對端點https://emf2.bundesnetzagentur.de/karte/Standortservice.asmx/GetStandorteFreigabe的請求呈現,並帶有框坐標(在本例中為{"Box":{"sued":52.39231101879802,"west":14.248666763305664,"nord":52.42927461241364,"ost":14.337587356567385}} )。

響應是 json。 位置數據由 AES 加密。 解密代碼在 js 腳本加載頁面中可用(函數CryptParamsDecryptData )。

解密后我們得到了這個不錯的數據: "[{"Titel":"018126","Lng":14.311666,"Lat":52.428888,"fID":1076,"sonderseite":false},{"Titel":"011720","Lng":14.259722,"Lat":52.423054,"fID":2196,"sonderseite":false},{"Titel":"87011082","Lng":14.275832,"Lat":52.401666,"fID":560919,"sonderseite":false}]"

你有兩種方法。

  1. 使用 selenium 或類似軟件渲染 JS 並嘗試解析生成的 DOM;

  2. 編寫解析器將請求發送到 GetStandorteFreigabe 端點並解碼它的響應(將代碼從 js 轉換為 python),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM