微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python Splinter 使用分隔符返回文本和空白值

如何解决Python Splinter 使用分隔符返回文本和空白值

我目前在 splinter 中使用 find_by_xpath 来检索表的所有值。 它非常适合获取所有非空值并且花费很少的时间。 但是,表格的某些单元格是空白的,以下代码忽略了这些单元格。 另外,我需要在每个值之间使用分隔符(可能是管道 - '|'?)。

browser.find_by_xpath("//*[contains(text(),'Table of Data')]/..").value

这是第一行的示例结果:

'col1 data col2 data col3 data'

我需要的是这个,因为第 4 列(但有时是其他列)有一个空单元格:

'col1 data|col2 data|col3 data|""'

提前致谢!

HTML:

<td class="padtd" height="150" valign="top" width="75%" colspan="2">
   <div class="headingSum">Table of Data </div>
   <table style="width:100%;height=10;valign:top">
<tbody>
   <tr>
      <td height="15" width="50%" class="selTabSum">
         <div>
         <table style="width:100%;" valign="top">
            <tbody>
               <tr>
                  <td width="10%" class="tableheading">Column 1</td>
                  <td width="15%" class="tableheading">Column 2 </td>
                  <td width="25%" class="tableheading">Column 3 </td>
                  <td width="50%" class="tableheading">Column 4 </td>
               </tr>
               <tr>
                  <td width="10%" valign="top" class="tableCell"><a href=""><span class=“data” id="160042">col1 data</span></a></td>
                  <td width="15%" valign="top" class="tableCell">col2 data</td>
                  <td width="25%" valign="top" class="tableCell">col3 data</td>
                  <td width="50%" class="tableCell"></td>
               </tr>
               <tr>
                  <td width="10%" valign="top" class="tableCell"><a href=""><span class=“data” id="160042">col1 data</span></a></td>
                  <td width="15%" valign="top" class="tableCell">col2 data</td>
                  <td width="25%" valign="top" class="tableCell">col3 data</td>
                  <td width="50%" class="tableCell"></td>
               </tr>
               <tr>
                  <td width="10%" valign="top" class="tableCell"><a href=""><span class=“data” id="97851">col1 data</span></a></td>
                  <td width="15%" valign="top" class="tableCell">col2 data</td>
                  <td width="25%" 
                     valign="top" class="tableCell">col3 data</td>
                  <td width="50%" class="tableCell">
                     col4 data
                     <table width="100%">
                        <tbody>
                           <tr></tr>
                        </tbody>
                     </table>
                  </td>
               </tr>
            </tbody>
         </table>
      </td>

解决方法

仅使用 selenium 和 python,您可以实现以下目标:

# Retrieve the headers of each cell
table_headers = [el.text for el in driver.find_elements_by_css_selector("table td.tableheading")]
table_row = []
table = []

for tr in driver.find_elements_by_css_selector("table table tr"):
    cells = [el.text for el in tr.find_elements_by_css_selector('td.tableCell')]
    if len(cells) > 0:
        table_row.append(cells)

# Create your table [row,dict of header/value]
for row in table_row:
    table.append(dict(zip(table_headers,row)))

输出:

[{'Column 1': 'col1 data','Column 2': 'col2 data','Column 3': 'col3 data','Column 4': ''},{'Column 1': 'col1 data','Column 4': 'col4 data'}]
[{'Column 1': 'col1 data','Column 4': 'col4 data'}]
,

我最终从表格中获取 HTML(通过 xpath)并通过 abstract class MyClass {} class ClassA extends MyClass { int propI; String propS; } class ClassB extends MyClass { bool propB; num propN; } main(List<String> args) { final keys1 = List<String>.from(['y','z']); final keys2 = List<int>.generate(3,(i) => i+1); final x = Map<String,Map<int,MyClass>>.fromIterables( keys1,List<Map<int,MyClass>>.generate(keys1.length,(i) => Map<int,MyClass>.fromIterables( keys2,List<MyClass>.generate(keys2.length,(j) => i == 0 ? ClassA() : ClassB()) )) ); print(x.toString()); print(x.runtimeType.toString()); }

将其传递给 Pandas
pd.read_html.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?