我正在尝试解析在评论中包含表格的网页。我似乎无法弄清楚如何从评论中获取表格的列和数据。这是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或其他人。
答案 0 :(得分:1)
如果每个文档确实只有一个注释,只需在将字符串传递给BeautifulSoup
或用于解析的任何内容之前将其删除:
doc = doc.replace("<!--","").replace("-->","")