# Open and close file just once
f = open('htmlfile.html', 'w') # Okay to open in write mode now
for item in soup.select('.profile-detail'):
f.write(item)
f.write('\n') # In case you're expecting each on a new line
f.close()
# With contexts
with open('htmlfile.html', 'w') as f:
for item in soup.select('.profile-detail'):
f.write(item)
f.write('\n') # In case you're expecting each on a new line
# File is auto-magically closed by the time you get here
我从你的截图中的
soup
中得知,你正在使用BeautifulSoup来提取带有“profile detail”类的元素。鉴于此,您的代码有两个问题:select()
函数返回的列表中的值item
是标记类的一个实例,file对象的write
方法需要一个字符串。作为@PRMoureu wrote,您可以将标记实例强制转换为字符串,它将返回它表示的原始HTML字符串,方法是将文件写入行替换为以下内容:打开的文件在循环中以write(“w”)模式打开。这意味着,对于循环的每次迭代,文件都将被覆盖,如果您试图收集查询返回的所有元素,则只能得到最后一个元素。如果要在文件中包含所有这些文件,以下是解决此问题的替代方法:
^{pr2}$但这并不太好,因为在每次迭代中都不需要打开和关闭文件。我们可以为所有写操作打开文件:
或者,我个人的最爱是,做同样的事情,但是要考虑上下文,这样你就不会担心忘记
f.close()
或者不小心给了它错误的缩进或者以后的事情:只需使用
str()
获取整个标记内容:相关问题 更多 >
编程相关推荐