【问题标题】:AmCharts Scraping Using Python Selenium使用 Python Selenium 进行 AmCharts 抓取
【发布时间】:2021-12-30 12:13:21
【问题描述】:

我正在尝试从此 URL 中刮取 JSON 对象中的 AmCharts 图形值

使用以下命令

driver.execute_script("AmCharts.charts[0].dataProvider")

在脚本中,它返回None,而浏览器控制台返回带有AmCharts数据的JSON对象

在网页界面中是这样的

如何正确检索此 dataProvider 数组。提前致谢。

【问题讨论】:

  • 你要抓取什么数据?
  • 表值dataProvider数组
  • 我在整个页面中没有看到任何//table
  • 我的意思是Amchart Graph,用截图更新了我的问题,谢谢

标签: python selenium web-scraping amcharts


【解决方案1】:

您需要将return 添加到您的execute_script 调用中才能访问脚本中的值,例如driver.execute_script("return AmCharts.charts[0].dataProvider")

完整代码如下:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

driver_path = r"path/to/chromedriver"

driver = webdriver.Chrome(driver_path)
driver.maximize_window()
wait = WebDriverWait(driver, 30)

driver.get("https://eg.pricena.com/en/product/oppo-reno-5g-price-in-egypt")

# scroll into the div so that the chart will render
driver.execute_script("document.getElementById('product_pricechart').scrollIntoView()")

# wait until the chart div has been rendered before accessing the data provider
wait.until(lambda x: x.find_element_by_class_name("amcharts-chart-div").is_displayed())

# display chart data
print(driver.execute_script("return AmCharts.charts[0].dataProvider"))

driver.close()

【讨论】:

  • 优秀。按预期工作
【解决方案2】:

图形不在 Selenium 视口中,所以首先我们必须处理垂直滚动到所需图形,然后我看到 //*[name()='tspan'] xpath 包含 UI 中存在的水平和垂直值。

代码:

driver_path = r'D:\\chromedriver.exe'

driver = webdriver.Chrome(driver_path)
driver.maximize_window()
wait = WebDriverWait(driver, 30)

driver.get("https://eg.pricena.com/en/product/oppo-reno-5g-price-in-egypt")

driver.execute_script("window.scrollTo(0, 1000)")

ele = driver.find_element_by_xpath("//*[name()='svg']")
driver.execute_script("arguments[0].scrollIntoView(true);", ele)

char_val = []
for elem in driver.find_elements(By.XPATH, "//*[name()='tspan']"):
    print(elem.text)

进口:

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

输出:

Mar
May
Jul
Sep
Nov
Mar
May
Jul
Sep
Nov
5,000
5,500
6,000
6,500
7,000
7,500
8,000

Process finished with exit code 0

【讨论】:

  • 很好,这是一个非常好的解决方案。如果可能的话,我怎样才能得到完整的日期
  • 你说的日期到底是什么意思?
  • 请参考link,将鼠标悬停在图表上会出现完整日期
  • 你有这个的休息网址吗?休息会很轻松。
  • 您提供的解决方案获取 X 轴刻度和 Y 轴刻度,我想获取图中的值和 JSON 数据的日期。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 2018-07-20
  • 2020-03-13
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
相关资源
最近更新 更多