【发布时间】:2018-10-30 09:34:02
【问题描述】:
我正在尝试从以下网页抓取可用的公寓列表:https://3160599v2.onlineleasing.realpage.com/
我正在使用 Selenium 的 Python 实现,但到目前为止,我还没有找到一种有效的解决方案来以编程方式获取内容。我最基本的代码如下,目前只返回非动态的HTML源代码:
from selenium import webdriver
driver = webdriver.Chrome('/path_to_driver')
driver.get('https://3160599v2.onlineleasing.realpage.com/')
html = driver.page_source
返回的html 变量不包含我需要的公寓房源。
如果我使用 Chrome 的内置检查工具“检查”元素,我可以看到内容位于未分类的 iframe 中:<iframe frameborder="0" realpage-oll-widget="RealPage-OLL-Widget" style="width: 940px; border: none; overflow: hidden; height: 2251px;"></iframe>
这个 iframe 中有几个孩子,您还可以看到 div <div class="main-content">,其中包含我需要的所有信息。
我尝试过的其他解决方案包括实现显式 WebDriverWait:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CLASS_NAME, 'main-content')))
我使用此方法得到一个 TimeoutException,因为从未找到该元素。
我也尝试使用driver.switch_to.frame() 方法,但没有成功。
实际上允许我从网页中获取公寓列表的唯一步骤是(使用 Chrome):
- 手动右键单击网页中的列表元素
- 点击检查
- 找到 div 'main-content'
- 手动右键单击此 div 并选择复制 -> 复制元素
这不是一个有效的解决方案,因为我正在寻求自动化这个过程。
如何以编程方式从网页中获取这些动态生成的内容?
【问题讨论】:
标签: python html selenium dynamic web-scraping