我想编写一个脚本,它将从Python中删除一个简单的html文件中的所有图像,并将文件保存到位。
这是我的尝试:
from bs4 import BeautifulSoup, NavigableString
def strip_tags(html, invalid_tags):
soup = BeautifulSoup(html)
for tag in soup.findAll(True):
if tag.name in invalid_tags:
s = ""
for c in tag.contents:
if not isinstance(c, NavigableString):
c = strip_tags(unicode(c), invalid_tags)
s += unicode(c)
tag.replaceWith(s)
return soup
data ="C:\\Users\\ADMIN\\Documents\\webpage 1.htm"
with open(data) as orig_f:
html = BeautifulSoup(orig_f.read())
invalid_tags = ['img']
print orig_f
print strip_tags(orig_f, invalid_tags)
我正在努力解决两件事,首先代码运行没有错误,但最后一行,print,什么都不打印,前面的行打印一个内存地址。我已经尝试搜索我的问题/阅读文档以了解我在这里做错了什么,但我正在努力。
如何让此代码从我的HTML文件中删除所有图片代码,以及将其保存到位的最佳做法是什么?
答案 0 :(得分:1)
" orig_f"是一个文件对象。如果你想打印内容,一种方法是做orig_f.read()或循环f并打印每一行。我认为这就是为什么strip_tags函数返回None。我没有使用过BeautifulSoap,所以不能说它将会返回什么。
对于inplace save,我总是在临时位置创建该文件的副本,并在覆盖当前文件之前打开临时文件进行读取。这是因为文件可能存储在内存中很大,我处理大的ascii文件,如果一次性加载所有内容,可能会崩溃。