【问题标题】:Scraping Multiple Tables with Beautiful Soup用漂亮的汤刮多张桌子
【发布时间】:2013-11-08 03:40:09
【问题描述】:

我是一个 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. (Lucid Lynx),忽略
  3. (精确穿山甲),DNE
  4. 等等……

我可以使用table = soup.findAll("table")提取所有表格,但我不确定如何将所有表格的内容拆分为电子表格的两个不同单元格。

任何建议将不胜感激。

【问题讨论】:

  • 尝试自己用 table('tr') 来跟踪行,然后用 row('td') 来定位和提取你想要的内容。然后使用 csv lib 将它们转换为 csv 格式。如果遇到任何问题,请询问

标签: python html csv web-scraping beautifulsoup


【解决方案1】:

首先,您的文件似乎是有效的 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'))

【讨论】:

  • 这是问题吗?不!
  • 冷静一下,我也给出了答案,有什么问题?
猜你喜欢
  • 2017-12-23
  • 1970-01-01
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
相关资源
最近更新 更多