【问题标题】:Pandas read_html only finds header of a html tablePandas read_html 仅查找 html 表的标题
【发布时间】:2019-12-23 14:46:30
【问题描述】:

我有这张桌子:

我使用 pandas 解析它:

s = '<table id="datatable"><tr><th onclick="sortTable(0)">Gene locus</th><th onclick="sortTable(1)">Organism</th><th onclick="sortTable(2)">Found in</th><th onclick="sortTable(3)">Gene name</th><th onclick="sortTable(4)">AA mutation</th><th onclick="sortTable(5)">Drug</th><th onclick="sortTable(6)">Tandem repeat name</th><th onclick="sortTable(7)">Tandem repeat sequence</th><th onclick="sortTable(8)">Reference</th></tr><td>ASPNIDRAFT_55947</td><td>Aspergillus niger</td><td>Animal - Human</td><td>CYP51a</td><td>R228Q </td><td>Posaconazole</td><td></td><td><div style="word-wrap: break-word;max-width: 250px;"></div></td><td><a href="http://jcm.asm.org/content/54/9/2365.full">10.1128/JCM.01075-16</a></td></tr></table>'
table = pandas.read_html(s)[0]
print(table)

但是这给了我:

Empty DataFrame
Columns: [Gene locus, Organism, Found in, Gene name, AA mutation, Drug, Tandem repeat name, Tandem repeat sequence, Reference]
Index: []

在标题 (&lt;th&gt;..) 下方显然有一个实心行 (&lt;tr&gt;...),所以我不知道哪里出了问题,更重要的是我无法正确阅读表格。

(P.s. 我现在无法从我所在的国家/地区访问 Imgur,所以如果链接不合适,请随时更改它或告诉我如何更改它)

【问题讨论】:

    标签: python html pandas html-table html-parsing


    【解决方案1】:

    固定:

    s = '<table id="datatable"><tr><th onclick="sortTable(0)">Gene locus</th><th onclick="sortTable(1)">Organism</th><th onclick="sortTable(2)">Found in</th><th onclick="sortTable(3)">Gene name</th><th onclick="sortTable(4)">AA mutation</th><th onclick="sortTable(5)">Drug</th><th onclick="sortTable(6)">Tandem repeat name</th><th onclick="sortTable(7)">Tandem repeat sequence</th><th onclick="sortTable(8)">Reference</th></tr><tr><td>ASPNIDRAFT_55947</td><td>Aspergillus niger</td><td>Animal - Human</td><td>CYP51a</td><td>R228Q </td><td>Posaconazole</td><td></td><td><div style="word-wrap: break-word;max-width: 250px;"></div></td><td><a href="http://jcm.asm.org/content/54/9/2365.full">10.1128/JCM.01075-16</a></td></tr></table>'
    table = pandas.read_html(s)[0]
    print(table)
    

    您在第一个 &lt;/tr&gt; 标记之后缺少一个 &lt;tr&gt; 标记。

    输出:

             Gene locus  ...             Reference
    0  ASPNIDRAFT_55947  ...  10.1128/JCM.01075-16
    
    [1 rows x 9 columns]
    

    【讨论】:

      【解决方案2】:

      您在第一个 &lt;td&gt; 之前缺少一个 &lt;tr&gt;

      这是正确的字符串,

      s = '<table id="datatable"><tr><th onclick="sortTable(0)">Gene locus</th><th onclick="sortTable(1)">Organism</th><th onclick="sortTable(2)">Found in</th><th onclick="sortTable(3)">Gene name</th><th onclick="sortTable(4)">AA mutation</th><th onclick="sortTable(5)">Drug</th><th onclick="sortTable(6)">Tandem repeat name</th><th onclick="sortTable(7)">Tandem repeat sequence</th><th onclick="sortTable(8)">Reference</th></tr><tr><td>ASPNIDRAFT_55947</td><td>Aspergillus niger</td><td>Animal - Human</td><td>CYP51a</td><td>R228Q </td><td>Posaconazole</td><td></td><td><div style="word-wrap: break-word;max-width: 250px;"></div></td><td><a href="http://jcm.asm.org/content/54/9/2365.full">10.1128/JCM.01075-16</a></td></tr></table>'
      

      现在可以了。

      【讨论】:

      • 谢谢你修复它!我使用s = s.replace("&lt;td&gt;", "&lt;tr&gt;&lt;td&gt;", 1) 替换我解析的所有页面的 if
      猜你喜欢
      • 2019-08-17
      • 1970-01-01
      • 2019-04-23
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 2022-11-25
      • 2020-12-18
      相关资源
      最近更新 更多