【问题标题】:Scraping data from high charts从 highcharts 中抓取数据
【发布时间】:2020-11-18 17:16:50
【问题描述】:

我有两个问题:第一,我不能点击显示全部底部;其次,我无法从高位图表中获取数据。

我在 Stack Overflow 上看到了一些关于高位图表的示例;但是,我不知道人们如何确定我们要执行哪些 JS 代码。

我尝试了以下代码来实现:

from selenium import webdriver
DRIVER_PATH = r"C:\Users\XX\Downloads\chromedriver_win32\chromedriver.exe"
driver = webdriver.Chrome(executable_path=DRIVER_PATH)
url = "https://siterankdata.com/wsj.com"
driver.get(url)
driver.find_element_by_xpath('//*[@id="smallchart"]/div/div/svg/g[17]/g/text/tspan').click() # Does not work I try to click on the show all button.

我将不胜感激!

【问题讨论】:

  • 您尝试点击的 //*[@id="smallchart"]/div/div/svg/g[17]/g/text/tspan 是哪个元素?
  • 显示所有按钮
  • 嗨@Dogukan Yılmaz,您可以使用JS 全局变量Highcharts 来访问图表并执行例如:Highcharts.charts[0].series[x].points 用于数据点。
  • 嗨@Ppotaczek,我认为数据不是加载高图表而是加载AmCharts,您知道如何获得吗?
  • 很遗憾我不知道 AmCharts。

标签: python selenium svg highcharts webdriverwait


【解决方案1】:

点击show all按钮使用WebDriverWait()并等待element_to_be_clickable()并关注xpath

driver.get(url)
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//div[@id='smallchart']//*[name()='svg']/*[name()='g'][17]/*[name()='g']/*[name()='text']/*[name()='tspan']"))).click()

您需要导入以下库

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

【讨论】:

  • @DogukanYılmaz :您希望从高位图表中获得什么数据?
  • 网站排名数据中的值以及日期和值
【解决方案2】:

文本为 Show all 的元素是 元素,因此要单击该元素,您必须为 element_to_be_clickable() 诱导 WebDriverWait 并且您可以使用以下任一Locator Strategies

  • 使用CSS_SELECTOR

    driver.get("https://siterankdata.com/wsj.com")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div#smallchart svg g text[text-anchor='start'] tspan"))).click()
    
  • 使用XPATH

    driver.get("https://siterankdata.com/wsj.com")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@id="smallchart"]//*[name()='svg']//*[name()='g']//*[name()='text']//*[name()='tspan' and text()='Show all']"))).click()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

参考文献

您可以在interacting with SVG element 中找到一些相关讨论:

【讨论】:

  • 谢谢,以后从图表中获取数据如何?
  • @DogukanYılmaz 您具体查看哪些数据?
  • 我点击“显示全部”的同一张表中的日期和排名值
  • @DogukanYılmaz 但这些数据不会一次出现。您必须使用ActionChains 鼠标悬停 并继续抓取数据。检查this discussion
  • 好的,让我尝试了解其中的内容并为我自己实施
猜你喜欢
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 2018-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
相关资源
最近更新 更多