我有一个非常长的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这样的语言所以,无论我做什么,我都会不断地看着这条线的起点。
答案 0 :(得分:0)
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))