-2

我是一个 python 新手,试图用 Beautiful Soup 刮桌子。

我想用 Ubuntu CVE 信息抓取类似于下面的表格,并将表格输出到 csv 文档。

<div class="pkg">
<div class="field">Package</div><div class="value">Source: <a href="http://people.canonical.com/~ubuntu-security/cve/pkg/mysql-cluster-7.0.html">mysql-cluster-7.0</a></div>
<table>
<tr><td>(Lucid Lynx):</td><td>ignored
</td></tr>
<tr><td>(Precise Pangolin):</td><td>DNE
</td></tr>
<tr><td>(Quantal Quetzal):</td><td>DNE
</td></tr>
<tr><td>(Raring Ringtail):</td><td>DNE
</td></tr>
<tr><td>(Saucy Salamander):</td><td>DNE
</td></tr>
</table>
</div>
<div class="pkg">
<div class="field">Package</div><div class="value"><a href="http://people.canonical.com/~ubuntu-security/cve/pkg/mysql-5.5.html">mysql-5.5</a></div>
<table>
<tr><td>(Lucid Lynx):</td><td>DNE
</td></tr>
<tr><td>(Precise Pangolin):</td><td>released
(5.5.32-0ubuntu0.12.04.1)
</td></tr>
<tr><td>(Quantal Quetzal):</td><td>released
(5.5.32-0ubuntu0.12.10.1)
</td></tr>
<tr><td>(Raring Ringtail):</td><td>released
(5.5.32-0ubuntu0.13.04.1)
</td></tr>
<tr><td>(Saucy Salamander):</td><td>released
(5.5.32-0ubuntu1)
</td></tr>
</table>
</div>

我希望 csv 输出采用这种格式:

  1. 发布,状态
  2. (清醒猞猁),忽略
  3. (精准穿山甲),DNE
  4. ETC....

我可以拉出所有表格table = soup.findAll("table")但我不确定如何将所有表格的内容分成两个不同的单元格到电子表格中。

任何建议将不胜感激。

4

1 回答 1

0

首先,您的文件似乎是有效的 XML,因此您应该只使用 python 中的普通 XML 解析。根本不需要美丽的汤。

也就是说,你真的很想找到所有行,遍历它们,然后加入列。

import csv
with open('some.csv', 'rb') as f:
    writer = csv.writer(f)
    writer.writerow(['release', 'status'])
    for row in table.find_all('tr'):
        writer.writerow(col.string for col in row.find_all('td'))
于 2013-10-29T06:10:41.090 回答