Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从javascript生成的工具提示中提取文本_Javascript_Python_Web Scraping_Python Requests Html - Fatal编程技术网

如何从javascript生成的工具提示中提取文本

如何从javascript生成的工具提示中提取文本,javascript,python,web-scraping,python-requests-html,Javascript,Python,Web Scraping,Python Requests Html,我编写了以下代码来获取地图中所有蓝色标记的位置 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.

我编写了以下代码来获取地图中所有蓝色标记的位置

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,该ID显示在鼠标上方的工具提示中:

工具提示的html代码似乎是由鼠标悬停事件触发的:

有没有办法从工具提示中删除ID?我想知道是否可以使用render的script参数强制鼠标悬停事件。但我找不到将其集成到代码中的方法:

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

地图上的点通过请求以方框坐标呈现给端点(在本例中,
{“box”:{“sued”:52.39231101879802,“west”:14.24866763305664,“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}”

你有两种方法

  • 使用selenium或类似软件呈现JS并尝试解析生成的DOM

  • 编写解析器将请求发送到GetStandorteFreigabe端点并解码其响应(将代码从js转换为python)


  • 地图上的点通过请求以方框坐标呈现给端点(在本例中,
    {“box”:{“sued”:52.39231101879802,“west”:14.24866763305664,“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}”

    你有两种方法

  • 使用selenium或类似软件呈现JS并尝试解析生成的DOM

  • 编写解析器将请求发送到GetStandorteFreigabe端点并解码其响应(将代码从js转换为python)


  • 我建议使用而不是您当前使用的字符串函数。使用Beautifulsoup,您可以轻松地从页面中提取所需内容。感谢您的建议。我删除了字符串函数以使其更加清晰,并将重点放在回答帖子中的问题上,这个问题仍然没有得到回答。嗯,看起来整个地图都是用Javascript呈现的。因此,我相信您必须使用一些无头浏览器,如Scrapy或Selenium,才能执行Javascript。即使这样,也可能很难提取所有的id.requests\u html正在呈现地图的Javascript。在初始页面加载时,似乎只有工具提示未呈现。我建议使用而不是当前使用的字符串函数。使用Beautifulsoup,您可以轻松地从页面中提取所需内容。感谢您的建议。我删除了字符串函数以使其更加清晰,并将重点放在回答帖子中的问题上,这个问题仍然没有得到回答。嗯,看起来整个地图都是用Javascript呈现的。因此,我相信您必须使用一些无头浏览器,如Scrapy或Selenium,才能执行Javascript。即使这样,也可能很难提取所有的id.requests\u html正在呈现地图的Javascript。在初始页面加载时,似乎只有工具提示未呈现。