【问题标题】:Scraping HTML table in Python lxml在 Python lxml 中抓取 HTML 表
【发布时间】:2015-02-04 13:49:46
【问题描述】:

这个问题听起来很简单,但我在解决它时遇到了困难。我有一个如下表:

<table><tbody>
<tr>
<td>2003</td>
<td><span class="positive">1.19</span> </td>
<td><span class="negative">-0.48</span> </td>
</tr>

我的代码如下:

 from lxml import etree

 for elem in tree.xpath('//*[@id="printcontent"]/div[8]/div/table/tbody/tr'):
    for c in elem.xpath("//td"):
        if(c.getchildren()): # for the <span> thing
            text = c.xpath("//span/text()")
        else:
             text = c.text

但我无法遍历“td”元素。我一直在尝试这一天,但无济于事!我想得到 2003。1.19 和 -0.48。

请帮忙!

【问题讨论】:

    标签: python web-scraping lxml


    【解决方案1】:

    看起来您使用的是 HTML,而不是 XML。因此,使用 lxml.html,而不是 lxml.etree 解析数据。如果data.html 看起来像这样:

    <table><tbody>
    <tr>
    <td>2003</td>
    <td><span class="positive">1.19</span> </td>
    <td><span class="negative">-0.48</span> </td>
    </tr>
    

    然后

    import lxml.html as LH
    tree = LH.parse('data.html')
    print([td.text_content() for td in tree.xpath('//td')])
    

    产量

    ['2003', '1.19 ', '-0.48 ']
    

    如果

    for elem in tree.xpath('//*[@id="printcontent"]/div[8]/div/table/tbody/tr'):
    

    没有返回任何elems,那么您需要向我们展示足够的 HTML 来帮助我们调试为什么这个 XPath 不起作用。

    【讨论】:

    • 太棒了!是的,我犯了这个 XML - HTML 错误
    猜你喜欢
    • 2018-02-22
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    相关资源
    最近更新 更多