使用python

时间:2017-01-15 01:19:26

标签: python html

我正在尝试解析在评论中包含表格的网页。我似乎无法弄清楚如何从评论中获取表格的列和数据。这是html源代码的一部分:

<div id="all_info" class="table_wrapper setup_commented commented">
    <div class="section_heading">
       <span class="section_anchor" id="id_link" data-label="interesting data"/>
       <h2>blah, blah</h2>    
       <div class="section_heading_text">
           <ul> <li>* indicates something important</li></ul>
       </div>              
    </div>
    <div class="placeholder"/>
    <!--  
        <div class="table_outer_container">
        <div class="overthrow table_container" id="div_info">
        <table class="sortable stats_table" id="info" data-cols-to-freeze=1>    <caption>Interesting data Table</caption>
            <colgroup><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col></colgroup>
            <thead>
                <tr class="over_header"> <td> these are discard filler headers</td>
                </tr>
                <tr> <td> there are multiple entries here for headers </td>
                </tr>
            </thead>
            <tbody>
                <tr ><td> Lots of data here in series of columns </td>
                </tr> 
            </tbody>
        </table>
        </div>
        </div>
    -->
</div>

我正在使用PyQuery,但我对其他解决方案持开放态度。到目前为止,我从html获得了一个PyQuery文档,如下所示:

from pyquery import PyQuery as pq
import requests

doc = pq(requests.get(url).content)
table = doc('#all_info')

这让我得到了我上面显示的文本的PyQuery对象。我还发现了etree,我可以用来隔离注释文本,但后来我失去了在文本中隔离html标记的能力。这是代码:

from lxml import etree
tree = etree.fromstring(str(table))
comments = tree.xpath('//comment()')
for c in comments:
    print c

注意,每个评论列表中只有一条评论。

有没有人对更好的方法有其他想法?我有一个想法就是删除注释标记并将注释中的所有内容视为有效的html。但我无法弄清楚如何做到这一点并保持我使用PyQuery查找对象的能力。我愿意使用Soup或其他人。

1 个答案:

答案 0 :(得分:1)

如果每个文档确实只有一个注释,只需在将字符串传递给BeautifulSoup或用于解析的任何内容之前将其删除:

doc = doc.replace("<!--","").replace("-->","")