这是我的问题:
对于Excel编写应用程序,我正在从HTML表中提取数据。 我有一个包含表格的网站,我可以通过它来提取数据。
BUT
因为该表只显示了20行,所以我只能提取前20行而不是整个表(哪些行号非常随机)。
请注意,每次向下滚动时,HTML表都将他的td / ID重置为row0到row19(可能通常但我不是HTML专家:D)
我不知道如何在没有重复行数据的情况下浏览整个表格。
如果有人有想法,欢迎你!
编辑1:
这是HTML(我已将其过滤为只有我需要的col1)
`https://jsfiddle.net/yfb429Lo/13/`
事实上,桌子右侧有一个滚动标签,如屏幕截图所示:
当我在表格中向下滚动2次时,HTML会自动更新为:
==> row2变为row0,row3变为row1,...
我有100个表要提取,我无法通过提前知道表长度。
全心全意,
阿诺
答案 0 :(得分:0)
使用xpath而不是td / ID提取行,因为它们不是常量。
单击下一页按钮,然后再次提取行,直到下一页按钮单击为您提供NotFoundException(取决于该按钮在最后一页上不可见)。如果您提供HTML或网站链接,您将获得更好的答案。
答案 1 :(得分:0)
经过大量测试后,答案就是:
try:
last_row = driver.find_element_by_xpath(".//tr/*[contains(@id, '--TilesTable-rows-row19-col1')]")
last_row_old = driver.find_element_by_xpath(".//tr/*[contains(@id, '--TilesTable-rows-row19-col1')]").text
last_row.click()
last_row.send_keys(Keys.PAGE_DOWN)
time.sleep(2)
last_row_new = driver.find_element_by_xpath(".//tr/*[contains(@id, '--TilesTable-rows-row19-col1')]").text
while (last_row_new == last_row_old) is False:
table = driver.find_element_by_xpath("//*[contains(@id, '--TilesTable-table')]/tbody")
td_list = table.find_elements_by_xpath(".//tr/*[contains(@id, '-col1')]")
for td in td_list:
tile_title = td.text
sh_tile = wb["Tuiles"]
sh_tile.append([catalog, tile_title])
last_row = driver.find_element_by_xpath(".//tr/*[contains(@id, '--TilesTable-rows-row19-col1')]")
last_row_old = driver.find_element_by_xpath(".//tr/*[contains(@id, '--TilesTable-rows-row19-col1')]").text
last_row.click()
last_row.send_keys(Keys.PAGE_DOWN)
time.sleep(0.5)
last_row_new = driver.find_element_by_xpath(".//tr/*[contains(@id, '--TilesTable-rows-row19-col1')]").text
except selenium.common.exceptions.NoSuchElementException:
pass