【问题标题】:How to get text from a dynamic span [closed]如何从动态范围中获取文本[关闭]
【发布时间】:2021-04-25 06:14:51
【问题描述】:

我正在尝试使用 selenium 和 python 获取信息(特别是在 flightradar24.com 上跟踪的飞机的纬度和经度)。问题是坐标(跨度)每次都在变化(大约 10-15 秒),我认为这就是要获取的问题,因为其他信息,例如航空公司、出发时间、航班号,很容易获取。

当我写下坐标跨度时,我得到的只是一个空文本。

有人知道怎么做吗?

【问题讨论】:

  • 尝试使用 css 选择器而不是 xpath
  • 谢谢!但我试过: element = driver.find_element_by_css_selector("#mapStaticOverlays > div.flight-info-wrapper > section.scroll-wrapper > section.pnl-component.flight-data.squawk.appear > div.flex-wrapper > div: nth-child(2) > div:nth-child(1) > span:nth-child(2)") print(element.text)
  • 不要将您的代码发布为屏幕截图。以文本形式分享代码。
  • 请显示您要获取的 html 的 sn-p。现在看起来你已经应付了浏览器生成的脆弱、精确的 xpath。有很多 xpath 技巧可以提供更好的 xpath 选择器
  • @JaSON 好的!!这是我第一次在这里发帖,我不知道该怎么做。

标签: python html selenium web-scraping dynamic


【解决方案1】:

这对我来说可以获取纬度和经度的实际位置,但根据阅读页面的时间,它可能不会返回正确的值:

from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup as Bs


chrome_options = Options()
chrome_options.add_argument('--headless')
with webdriver.Chrome(options=chrome_options) as driver:
    url = "https://www.flightradar24.com/..."
    driver.get(url)
    html = driver.page_source

source = Bs(html, "lxml")
divs = source.find_all("div", class_="flex-wrapper")
rows = divs[-2].find_all("div", class_="row")
pos = rows[-1].find_all("div")
lat = pos[0].find_all("span")[-1].get_text()
lon = pos[1].find_all("span")[-1].get_text()
print(lat, lon)


OUTPUT:
42.9272 -33.8966
# OR IF PAGE IS READ BETWEEN LOADS
{Latitude} {Longitude}

try:
    lat = float(lat)
    lon = float(lon)
except ValueError:
    pass

由于页面的标记方式,我不确定如何缓解输出问题,但希望这是一个起点。

【讨论】:

  • 感谢您的回答!我会尝试。我认为如果它得到错误的信息是没有问题的,因为我试图得到一个完整的路线,如果某个点有点不同,没关系。
  • {Latitude} {Longitude}”是文字输出,因此您可以使用 try/except 过滤掉最坏的情况。
猜你喜欢
  • 2016-09-13
  • 1970-01-01
  • 2022-10-21
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多