我有一些问题。 我从html中删除了一些标签。但我希望输出没有空行。喜欢这个。
<!DOCTYPE html>
<html itemscope="itemscope" itemtype="http://schema.org/WebPage" lang="id-ID">
<head>
<title>Kenya Kasat Narkoba Polres Bintan Diganti? Ini Pesan Kapolres melada Kasatreskrim Baru - Tribun Batam</title>
</head>
<body id="bodyart">
<div id="skinads" style="position:fixed;width:100%;">
<div class="main">
<div class="f1" style="height:600px;width:90px;left:-97px:position:relative;text-align:right;z-index:999999">
<div id="div-Left-Skin" style="width:90px; height:600px;display:none">
</div>
</div>
<div class="fr" style="height:600px;width;90px;right:-97px;position:relative;text-align:left;z-index:999999">
<div id="div-Right-Skin" style="width:90px; height:600px;display:none">
</div>
</div>
</div>
<div class="cl2"></div>
</div>
<div id="fb-root"></div>
我的预期输出是
<!DOCTYPE html>
<html itemscope="itemscope" itemtype="http://schema.org/WebPage" lang="id-ID">
<head>
<title>Kenya Kasat Narkoba Polres Bintan Diganti? Ini Pesan Kapolres melada Kasatreskrim Baru - Tribun Batam</title>
</head>
<body id="bodyart">
<div id="skinads" style="position:fixed;width:100%;">
<div class="main">
<div class="f1" style="height:600px;width:90px;left:-97px:position:relative;text-align:right;z-index:999999">
<div id="div-Left-Skin" style="width:90px; height:600px;display:none">
</div>
</div>
<div class="fr" style="height:600px;width;90px;right:-97px;position:relative;text-align:left;z-index:999999">
<div id="div-Right-Skin" style="width:90px; height:600px;display:none">
</div>
</div>
</div>
<div class="cl2"></div>
</div>
<div id="fb-root"></div>
如何删除html中的空行?我可以用beautifulsoup吗?还是任何图书馆?
更新
我尝试将我的代码与@elethan的anwer结合起来,但我收到了一些错误
我的代码是
from list import get_filepaths
from bs4 import BeautifulSoup
from bs4 import Comment
filenames = get_filepaths(r"C:\Coba")
index = 0
for f in filenames:
file_html=open(str(f),"r")
soup = BeautifulSoup(file_html,"html.parser")
[x.extract() for x in soup.find_all('script')]
[x.extract() for x in soup.find_all('style')]
[x.extract() for x in soup.find_all('meta')]
[x.extract() for x in soup.find_all('noscript')]
[x.extract() for x in soup.find_all(text=lambda text:isinstance(text, Comment))]
index += 1
stored_file = "PreProcessing\extracts" + '{0:03}'.format(index) + ".html"
filewrite = open(stored_file, "w")
filewrite.write(str(soup) + '\n')
with open(stored_file, 'r+') as f:
lines = [i for i in f.readlines() if i and i != '\n']
f.seek(0)
f.writelines(lines)
f.truncate()
filewrite.close
但是我得到了这样的输出(抱歉不能粘贴html) 实际上它在开始时非常好,但几乎在那里结束了nul nul nul(就像屏幕截图)。
答案 0 :(得分:0)
在您的代码中,首先从文件中删除所有额外的换行符:
with open(my_html_file) as f:
lines = [i for i in f.readlines() if i and i != '\n']
然后将过滤后的文本写回文件:
with open(my_html_file, 'w') as f:
f.writelines(lines)
或者在一个with
块中执行整个操作:
with open(my_html_file, 'r+') as f:
lines = [i for i in f.readlines() if i and i != '\n']
f.seek(0)
f.writelines(lines)
f.truncate()
根据您现有的代码(您应该将其添加到问题中),您可以简单地将代码的过滤部分添加到您拥有的代码中。
答案 1 :(得分:0)
是的,你可以使用Beautifulsoup,它非常简单。
BS4将尝试修复损坏的html标记,如最后一行</body></html>
并删除空白区域。不同解析器的结果会略有不同,'lxml'解析器表现良好。
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'lxml')
print(str(soup))
出:
<!DOCTYPE html>
<html itemscope="itemscope" itemtype="http://schema.org/WebPage" lang="id-ID">
<head>
<title>Kenya Kasat Narkoba Polres Bintan Diganti? Ini Pesan Kapolres melada Kasatreskrim Baru - Tribun Batam</title>
</head>
<body id="bodyart">
<div id="skinads" style="position:fixed;width:100%;">
<div class="main">
<div class="f1" style="height:600px;width:90px;left:-97px:position:relative;text-align:right;z-index:999999">
<div id="div-Left-Skin" style="width:90px; height:600px;display:none">
</div>
</div>
<div class="fr" style="height:600px;width;90px;right:-97px;position:relative;text-align:left;z-index:999999">
<div id="div-Right-Skin" style="width:90px; height:600px;display:none">
</div>
</div>
</div>
<div class="cl2"></div>
</div>
<div id="fb-root"></div>
</body></html>