我希望能够单独处理HTML文件中的某些标签。我的代码工作正常(到目前为止)除了两个以外的所有标签。这两个有两条线而不是一条。这是我的代码:
from bs4 import BeautifulSoup
with open("F:/gpu.txt") as f:
soup = BeautifulSoup(f)
section = soup.find_all("td")
#print(section[2])
for section in section:
if section.parent(text="GPU Name:"):
print(section.text)
elif section.parent(text="GPU Variant:"):
print (section.text)
elif section.parent(text="Bus Interface:"):
print (section.text)
elif section.parent(text="Transistors:"):
print (section.text)
它继续。但是,当我们到达时,让我们说“处理大小:”,html代码是不同的:
<th>Process Size:</th>
<td>
Something
<br />
Something Else
</td>
</tr>
对于所有其他情况,它就像:
<th>GPU Name:</th>
<td>BLABLA</td>
</tr>
<tr>
<th>GPU Variant:</th>
<td>BLABLA</td>
</tr>
<tr>
<th>Bus Interface:</th>
<td>BLABLA</td>
</tr>
<tr>
<th>Transistors:</th>
<td>BLABLA</td>
</tr>
因此,当我运行我的脚本时,我得到以下结果:
BLABLA
BLABLA
Something
Something Else
BLABLA
BLABLA
我需要的是能够单独使用“Something”和“Something Else”(并且没有那些白线和空格)和/或只做一件事,将其转换为如下字符串:某事/某事“。
很抱歉,如果我的信息不够清楚,英语不是我的第一语言。谢谢!
答案 0 :(得分:1)
您可以在部分中找到所有文本节点(使用text=True
)并将其与/
结合使用:
print('/'.join(item.strip() for item in section.find_all(text=True)))
示例:
from bs4 import BeautifulSoup
data = """
<table>
<tr>
<th>GPU Name:</th>
<td>BLABLA</td>
</tr>
<tr>
<th>GPU Variant:</th>
<td>BLABLA</td>
</tr>
<tr>
<th>Process Size: </th>
<td>BLABLA</td>
</tr>
<tr>
<th>Transistors:</th>
<td>BLABLA</td>
</tr>
<tr>
<th>Process Size:</th>
<td>
Something
<br />
Something Else
</td>
</tr>
</table>
"""
soup = BeautifulSoup(data)
section = soup.find_all("td")
for section in section:
if section.parent(text="GPU Name:"):
print(section.text)
elif section.parent(text="GPU Variant:"):
print (section.text)
elif section.parent(text="Process Size:"):
print ('/'.join(item.strip() for item in section.find_all(text=True)))
elif section.parent(text="Transistors:"):
print (section.text)
打印:
BLABLA
BLABLA
BLABLA
Something/Something Else
答案 1 :(得分:0)
这非常特定于您的示例HTML,并且它依赖于换行符的存在,但您可以这样做:
from bs4 import BeautifulSoup
with open("F:/gpu.txt") as f:
soup = BeautifulSoup(f)
for section in soup.find_all("td"):
print '/'.join([s.strip() for s in section.text.split('\n') if s.strip()])