【问题标题】:How to read table data using selenium python?如何使用 selenium python 读取表数据?
【发布时间】:2012-07-17 01:15:16
【问题描述】:

以下是表格 HTML 源代码,对于 selenium 读取其内容似乎非常复杂。有人可以帮助我,使用 selenium 将这些数据读入 python 吗?

<div class="general_table">
    <div class="general_s">
        <div class="general_text1">Name</div>
        <div class="general_text2">Abhishek</div>
    </div>
    <div class="general_m">
        <div class="general_text1">Last Name</div>
        <div class="general_text2">Kulkarni</div>
    </div>
    <div class="general_s">
        <div class="general_text1">Phone</div>
        <div class="general_text2"> 13613123</div>
    </div>
    <div class="general_m">
        <div class="general_text1">Cell Phone</div>
        <div class="general_text2">82928091</div>
    </div>         
    <div class="general_s">
        <div class="general_text1">City</div>
        <div class="general_text2"></div>
    </div>
    <div class="general_m">
        <div class="general_text1">Model</div>
        <div class="general_text2"> DELL PERC H700</div>
    </div>
</div>

【问题讨论】:

    标签: python html selenium tabular


    【解决方案1】:

    要使用 selenium webdriver 读取此表,xpath 似乎是最简单的方法 -

    我不太了解 python,所以代码可能是错误的,但想法似乎是正确的 -

    要找出 general_table 中的 div 标签的数量,我们使用 xpath -

    driver.find_elements_by_xpath(("//*[@class='general_table']/div") 将返回一个 size - 6 的列表。

    然后您可以使用循环遍历每个元素 -

    for(int i=1;i<=list.length;i++){
        String text1 = driver.find_element_by_xpath("//*[@class='general_table']/div["+i+"]/div[1]").text;
        String text2 = driver.find_element_by_xpath("//*[@class='general_table']/div["+i+"]/div[2]").text;
    }
    

    您可以通过这种方式读取表格中的所有标签。

    【讨论】:

    • 如果此解决方案对您有用,您能否通过勾选我的答案来将此答案标记为正确。
    【解决方案2】:

    使用 selenium 获取页面源代码(这样您就可以在所有 js/ajax 内容之后获得真正的内容)和类似 BeautifulSoup 的东西来解析它。

    from bs4 import BeautifulSoup
    
    soup = BeautifulSoup("""<div class="general_table">
        <div class="general_s">
            <div class="general_text1">Name</div>
            <div class="general_text2">Abhishek</div>
        </div>
        <div class="general_m">
            <div class="general_text1">Last Name</div>
            <div class="general_text2">Kulkarni</div>
        </div>
        <div class="general_s">
            <div class="general_text1">Phone</div>
            <div class="general_text2"> 13613123</div>
        </div>
        <div class="general_m">
            <div class="general_text1">Cell Phone</div>
            <div class="general_text2">82928091</div>
        </div>         
        <div class="general_s">
            <div class="general_text1">City</div>
            <div class="general_text2"></div>
        </div>
        <div class="general_m">
            <div class="general_text1">Model</div>
            <div class="general_text2"> DELL PERC H700</div>
        </div>
    </div>""")
    
    def tags(iterable):
        return filter(lambda x: not isinstance(x, basestring), iterable)
    
    for table in soup.find_all('div', {'class': 'general_table'}):
        for line in tags(table.contents):
            for i, column in enumerate(tags(line.contents)):
                if column.string:
                    print column.string.strip(),
                if i:
                    print ',',
                else:
                    print ':',
            print ''    
    

    结果:

    Name : Abhishek , 
    Last Name : Kulkarni , 
    Phone : 13613123 , 
    Cell Phone : 82928091 , 
    City : 
    Model : DELL PERC H700 , 
    

    【讨论】:

    • 谢谢 Paulo,虽然使用 selenium 获取源代码不是一个好主意,但这个解决方案也适用于我。因此我会选择 Hari 的解决方案。
    猜你喜欢
    • 2020-07-03
    • 1970-01-01
    • 2020-10-23
    • 2021-08-02
    • 1970-01-01
    • 2020-12-16
    • 2021-01-07
    • 1970-01-01
    • 2020-09-29
    相关资源
    最近更新 更多