抓取数据在源文件Python中不可见

时间:2018-07-13 02:42:11

标签: python selenium phantomjs

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

谢谢, 雷克森

1 个答案:

答案 0 :(得分: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

元素的屏幕截图:

img

说明: :首先,要与地图下方的元素进行交互,您必须切换到iframe内容,否则无法实现与这个元素互动。然后,地图下方的数据位于svg标记中,这也不是简单的。为此,请提供我提供的示例。

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