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()
您好, 我想尝试使用BeautifulSoup并解析一些youtube网站。它得到了这条线路有25条线路。但是,如果我查看文件,那么只写了最后一个(其中一小部分)。 我尝试了不同的打开模式,或者file.close()函数。但没有任何效果。有人知道了吗?
答案 0 :(得分:5)
您正在遍历此行中的每个img标记并打印每一个:
for link in soup.find_all('img'):
print link.get('src')
但是,你没有在该循环中写入文件,你只是在最后写link.get('src')+'\n'
。
这只会写出当前分配的链接,这只是您在上面的循环中找到的 last img标记。这就是为什么只有一个'src'值将写入输出文件。
你需要将每一行写入循环中的文件,该文件遍历你感兴趣的每个img标签。你需要做一些重新排列才能做到这一点:
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()
您还应该记得关闭我在上面代码段的最后一行添加的文件。
编辑:根据下面的Hooked评论,如果您使用with
关键字,此片段就是这样的内容。一旦缩进块结束,使用with
将自动关闭文件,这样您甚至不必考虑它:
from bs4 import BeautifulSoup
soup = BeautifulSoup(open("youtube.htm"))
with open("parseddata.txt", "wb") as file:
for link in soup.find_all('img'):
print link.get('src')
file.write(link.get('src')+"\n")