BeautifulSoup,解析和编写文本文件中的数据

时间:2013-04-11 18:53:48

标签: python file io beautifulsoup

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()函数。但没有任何效果。有人知道了吗?

1 个答案:

答案 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")