【问题标题】:How do you replace HTML tags with commas (for CSV) in Python?如何在 Python 中用逗号(对于 CSV)替换 HTML 标记?
【发布时间】:2016-08-04 20:34:27
【问题描述】:

我有一个非常长的 HTML 文件,我无法对其进行修改,但想解析 CSV 输出。想象一下下面的代码在同一行重复了数百次。我意识到如果有换行符,这会简单得多,但我无法控制文件的创建方式。您还应该知道这段代码中没有友好的换行符;想象一下完全缩小的代码。我刚刚添加了中断,因此更容易可视化。但是,任何对此的实际解决方案都不能依赖换行符或空格,因为它们在现实中并不存在。

<tr id="link">
<td><a href="https://www.somewebsite.com" target="_target">Title</a></td>
<td>Value 1</td><td style="width:20ch">Value 2</td>
<td></td><td></td><td>Value 3</td>
<td>Value 4</td><td>Value 5</td><td>Value 6</td>
<td>Value 7</td><td>Value 8</td><td>Value 9</td></tr>

我想要的输出是https://www.somewebsite.com, Title, Value 1, Value 2, , , Value 3, ...(等等)

基本上,我想用逗号替换标签中的所有值,但保留 URL。我在 Python 中找不到任何方法来解析这样的东西,因为 Python 中的 scan()、find() 等函数似乎不像我在 C 等语言中习惯的那样全局跟踪文件指针。所以,无论我做什么,我总是只看行首。

【问题讨论】:

  • 你看过beautifulsoup吗? crummy.com/software/BeautifulSoup
  • 你的 html 中的所有表格都是这样吗?
  • 不,它不仅仅是 HTML 中的表格。但是,我可以跳到代码中的表格,但我仍然需要解析它。

标签: python csv parsing html-parsing tokenize


【解决方案1】:
from bs4 import BeautifulSoup

html_doc = """
<tr id="link">
<td><a href="https://www.somewebsite.com" target="_target">Title</a></td>
<td>Value 1</td><td style="width:20ch">Value 2</td>
<td></td><td></td><td>Value 3</td>
<td>Value 4</td><td>Value 5</td><td>Value 6</td>
<td>Value 7</td><td>Value 8</td><td>Value 9</td></tr>"""

for tr in BeautifulSoup(html_doc, 'html.parser').find_all('tr'):
    row = []
    for td in tr.find_all('td'):
        anchor = td.find('a')
        row.extend([anchor['href'], anchor.text] if anchor else [td.text])
    print(', '.join(row))

【讨论】:

    猜你喜欢
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 2016-02-23
    • 2021-07-30
    • 2011-02-26
    • 2022-08-12
    相关资源
    最近更新 更多