用美丽的汤刮几张桌子

时间:2013-10-29 05:38:55

标签: python html csv web-scraping beautifulsoup

我是一个狡猾的新手试图用美丽的汤刮桌子。

我想用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. (Lucid Lynx),忽略了
  3. (精确穿山甲),DNE
  4. 等...
  5. 我可以用table = soup.findAll("table")拉出所有表格但是我不确定如何将所有表格的内容分成两个不同的单元格到电子表格中。

    非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

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

那就是说,你真的想要find_all行,循环它们,然后加入列。

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'))