Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 美化组,解析并将数据写入文本文件_Python_File_Io_Beautifulsoup - Fatal编程技术网

Python 美化组,解析并将数据写入文本文件

Python 美化组,解析并将数据写入文本文件,python,file,io,beautifulsoup,Python,File,Io,Beautifulsoup,你好,, 我想尝试一下BeautifulSoup并解析一些youtube网站。它可以从中获得大约25行链接。但是如果我查一下这个文件,就会发现只有最后一个写的文件(它的一小部分)。 我尝试了不同的打开模式,或者file.close()函数。但什么都没用。有人找到线索了吗?您正在循环浏览此行中的每个img标签并打印每个标签: from bs4 import BeautifulSoup soup = BeautifulSoup(open("youtube.htm")) for link in

你好,, 我想尝试一下BeautifulSoup并解析一些youtube网站。它可以从中获得大约25行链接。但是如果我查一下这个文件,就会发现只有最后一个写的文件(它的一小部分)。
我尝试了不同的打开模式,或者file.close()函数。但什么都没用。有人找到线索了吗?

您正在循环浏览此行中的每个img标签并打印每个标签:

from bs4 import BeautifulSoup


soup = BeautifulSoup(open("youtube.htm"))

for link in soup.find_all('img'):
    print  link.get('src')



file = open("parseddata.txt", "wb")
file.write(link.get('src')+"\n")
file.flush()
但是,您并不是在该循环中写入文件,而是在最后写入
link.get('src')+'\n'

这将只写入当前分配给的链接,即您在上面的循环中找到的最后一个img标记。这就是为什么只有一个“src”值会写入输出文件的原因

您需要将每一行写入循环中的文件,该循环通过您感兴趣的每个img标记。要做到这一点,您需要做一些重新安排:

for link in soup.find_all('img'):
    print  link.get('src')
您还应该记得关闭该文件,正如我在上述代码段的最后一行中添加的那样

编辑:根据胡克在下面的评论,如果您将
关键字一起使用,则此代码段的外观如下。将
一起使用将在缩进块结束时自动关闭文件,这样您甚至不必考虑:

from bs4 import BeautifulSoup

soup = BeautifulSoup(open("youtube.htm"))


file = open("parseddata.txt", "wb")

for link in soup.find_all('img'):
    print  link.get('src')
    file.write(link.get('src')+"\n")

file.flush()
file.close()

您正在循环此行中的每个img标记并打印每个标记:

from bs4 import BeautifulSoup


soup = BeautifulSoup(open("youtube.htm"))

for link in soup.find_all('img'):
    print  link.get('src')



file = open("parseddata.txt", "wb")
file.write(link.get('src')+"\n")
file.flush()
但是,您并不是在该循环中写入文件,而是在最后写入
link.get('src')+'\n'

这将只写入当前分配给的链接,即您在上面的循环中找到的最后一个img标记。这就是为什么只有一个“src”值会写入输出文件的原因

您需要将每一行写入循环中的文件,该循环通过您感兴趣的每个img标记。要做到这一点,您需要做一些重新安排:

for link in soup.find_all('img'):
    print  link.get('src')
您还应该记得关闭该文件,正如我在上述代码段的最后一行中添加的那样

编辑:根据胡克在下面的评论,如果您将
关键字一起使用,则此代码段的外观如下。将
一起使用将在缩进块结束时自动关闭文件,这样您甚至不必考虑:

from bs4 import BeautifulSoup

soup = BeautifulSoup(open("youtube.htm"))


file = open("parseddata.txt", "wb")

for link in soup.find_all('img'):
    print  link.get('src')
    file.write(link.get('src')+"\n")

file.flush()
file.close()

由于OP对Python来说似乎是新的,因此最好编辑您的答案,以使用file作为上下文管理器打开,即使用
with
关键字。这将无缝地处理关闭。非常好的建议@Hooked!我已经在我的答案中添加了
的解释。谢谢由于OP对Python来说似乎是新的,因此最好编辑您的答案,以使用file作为上下文管理器打开,即使用
with
关键字。这将无缝地处理关闭。非常好的建议@Hooked!我已经在我的答案中添加了
的解释。谢谢