<p>我从你的截图中的<code>soup</code>中得知,你正在使用BeautifulSoup来提取带有“profile detail”类的元素。鉴于此,您的代码有两个问题:</p>
<ol>
<li><p><code>select()</code>函数返回的列表中的值<code>item</code>是标记类的一个实例,file对象的<code>write</code>方法需要一个字符串。作为<a href="https://stackoverflow.com/a/47301190/1852838">@PRMoureu wrote</a>,您可以将标记实例强制转换为字符串,它将返回它表示的原始HTML字符串,方法是将文件写入行替换为以下内容:</p>
<pre><code>f.write(str(item))
</code></pre></li>
<li><p>打开的文件在循环中以write(“w”)模式打开。这意味着,对于循环的每次迭代,文件都将被覆盖,如果您试图收集查询返回的所有元素,则只能得到最后一个元素。如果要在文件中包含所有这些文件,以下是解决此问题的替代方法:</p>
^{pr2}$
<p>但这并不太好,因为在每次迭代中都不需要打开和关闭文件。我们可以为所有写操作打开文件:</p>
<pre><code># 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()
</code></pre>
<p>或者,我个人的最爱是,做同样的事情,但是要考虑上下文,这样你就不会担心忘记<code>f.close()</code>或者不小心给了它错误的缩进或者以后的事情:</p>
<pre><code># 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
</code></pre></li>
</ol>