我已经在python中编写了一个与selenium结合使用的脚本来从位于网页(finance.yahoo)中的某个表中获取数据。但是,当我执行它时,我收到一个错误。我无法确定我是否有任何错误。 FYC,我到目前为止所写的内容都粘贴在下面。
脚本我尝试用:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://finance.yahoo.com/")
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "table.tbl tbody")))
items = driver.find_element_by_css_selector("table.tbl tbody")
list_of_data = [[item.text for item in data.find_elements_by_css_selector('td')]
for data in items.find_elements_by_css_selector('tr')]
for tab_data in list_of_data:
print(tab_data)
driver.quit()
我的脚本抛出的错误:
line 80, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
表格数据所在元素的部分部分:
<table cellspacing="0" cellpadding="0" border="0" width="100%" class="tbl">
<tbody>
<tr><th class="pr">Loan Type</th><th class="rate">Today</th><th class="ch">Change</th><th class="lw">Last Week</th></tr>
<tr class="">
<td class="pr"><a target="_top" rel="nofollow" href="https://finance.yahoo.com/rates">30 yr fixed</a></td>
<td class="rate">3.82%</td>
<td class="ch"><div class="arrow-up"></div></td>
<td class="lw">3.80%</td>
</tr>
<tr class="bk ">
<td class="pr"><a target="_top" rel="nofollow" href="https://finance.yahoo.com/rates/mortgage/15-year-fixed">15 yr fixed</a></td>
<td class="rate">3.01%</td>
<td class="ch"><div class="arrow-down"></div></td>
<td class="lw">3.05%</td>
</tr>
</tbody>
</table>
答案 0 :(得分:1)
以下是您的问题的答案:
查看您提供的HTML,我假设您正在尝试删除表格标题为<{1}},Rates
,{{{strong> Loan Type
的表格。 1}}和Today
。但我仍然不确定您希望废弃数据的格式。
Change
表位于Last Week
范围内,名称为 Rates
。所以我们需要先切换到框架,然后刮掉桌子。以下是使用您的报废逻辑更改 iframe
表的工作代码块:
bankrate-overnight-average
我的控制台上的输出显示为:
Rates
如果这回答你的问题,请告诉我。
答案 1 :(得分:0)
我访问了url并检查了页面元素,并且没有tableName的className为'tbl',这就是驱动程序无法找到元素和超时的原因。只需尝试从以下行中删除.tbl:
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "table.tbl tbody")))
items = driver.find_element_by_css_selector("table.tbl tbody")
此外,由于项目是列表对象,因此find_elements_by_css_selector()方法将不适用于此,因此您可能会收到错误。