![](/img/trans.png)
[英]How to use python to scrape the text from a page generated by 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 腳本加載頁面中可用(函數CryptParams和DecryptData )。
解密后我們得到了這個不錯的數據: "[{"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}]"
你有兩種方法。
使用 selenium 或類似軟件渲染 JS 並嘗試解析生成的 DOM;
編寫解析器將請求發送到 GetStandorteFreigabe 端點並解碼它的響應(將代碼從 js 轉換為 python),
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.