首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从动态HTML表中提取所有数据

从动态HTML表中提取所有数据
EN

Stack Overflow用户
提问于 2018-06-05 23:24:10
回答 2查看 260关注 0票数 -2

这是我的问题:

对于Excel编写应用程序,我从HTML表中提取数据。我有一个包含表格的网站,我可以通过它来提取数据。

由于该表只显示了20行,所以我只能提取前20行,而不能提取整个表(行数非常随机)。

请注意,每次向下滚动时,HTML表都会将他的td/ID重置为row0为row19 (可能很常见,但我不是HTML :D )

我不知道如何在没有重复行数据的情况下遍历整个表。

如果有人有什么想法,欢迎你!

编辑1:

这是一个超文本标记语言(我已经对它进行了过滤,使其只包含我提取所需的col1 )

代码语言:javascript
复制
`https://jsfiddle.net/yfb429Lo/13/`

实际上,在表格的右侧有一个滚动标签,如下面的截图所示:

Table_screenshot

当我在表格中向下滚动2次时,HTML将自己更新为如下所示:

==> row2变成row0,row3变成row1,...

我有大约100个表要提取,但我不能提前知道表的长度。

谢谢大家,

阿诺德

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-06 20:46:53

经过大量测试后,答案如下:

代码语言:javascript
复制
 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
票数 0
EN

Stack Overflow用户

发布于 2018-06-06 04:24:08

使用xpath而不是td/td提取行,因为它们不是常量。

单击“下一页”按钮,然后再次提取行,直到“下一页”按钮单击显示NotFoundException (取决于按钮在最后一页是否可见)。如果您提供HTML或网站链接,您将得到更好的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50703723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档