【问题标题】:Scrape data not visible in the source file Python抓取源文件 Python 中不可见的数据
【发布时间】:2018-12-21 08:29:05
【问题描述】:

我想在https://www.climatechangecommunication.org/climate-change-opinion-map/ 网站上抓取数据。我对硒有点熟悉。但是我需要的位于地图下方的数据和地图上的工具提示在源文件中不可见。我已经阅读了一些关于使用 PhantomJS 和其他的帖子。但是,我不确定从哪里以及如何开始。有人可以帮我入门吗。

谢谢, 雷克森

【问题讨论】:

  • 不确定您所说的“地图下方”是什么意思,具体指什么?至于工具提示,它出现在悬停时。不过,填充工具提示的数据可能在源文件中的格式不同。
  • 地图下方的所有水平条带百分比
  • 与其刮,不如直接下载?我注意到您提供的页面底部的链接指的是耶鲁气候意见地图。谷歌搜索并想出了一个页面,您可以在其中download the data

标签: python selenium phantomjs


【解决方案1】:

您可以使用此示例代码:

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

driver = webdriver.Chrome()
driver.get("https://www.climatechangecommunication.org/climate-change-opinion-map/")

# switch to iframe
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "//iframe[@src = 'https://environment.yale.edu/ycom/factsheets/MapPage/2017Rev/?est=happening&type=value&geo=county']")))

# do your stuff
united_states = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//*[@id='document']/div[4]//*[name()='svg']")))
print(united_states.text)

# switch back to default content
driver.switch_to.default_content()

输出:

50%
No
12%
Yes
70%
United States

元素的屏幕截图:

说明:首先,要能够与地图下方的元素进行交互,你必须切换到iframe内容,否则无法交互有了这个元素。那么地图下方的数据在svg标签中,也不是微不足道的。为了能够做到这一点,你需要我提供的样本。

PS:我在我的代码中使用了WebDriverWait。使用WebDriverWait,您的代码会变得更快更稳定,因为 Selenium 会等待特定条件,例如特定元素的 visibilityclickable。在示例代码中,驱动程序至少等待 10 秒,直到满足预期条件。

【讨论】:

  • 您知道如何访问 iframe 中的源代码吗?我想在下拉菜单中通过州和县。我可以获得所有州和县的列表,但是当我使用 click() 时没有任何反应。提前致谢。
  • 您可以创建一个包含详细信息的新问题并将链接发送给我。我会尽力帮助你
猜你喜欢
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-04
  • 2018-09-16
相关资源
最近更新 更多