0
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() 関数を試しました。しかし、何も機能しませんでした。誰かが手がかりを得ましたか?

4

1 に答える 1

5

この行のすべての img タグをループして、それぞれを出力しています。

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

ただし、そのループでファイルに書き込むのlink.get('src')+'\n'ではなく、最後に書き込むだけです。

これは、現在割り当てられているリンクのみを書き込みます。これは、上記のループで見つけた最後のimg タグです。そのため、'src' 値が 1 つだけ出力ファイルに書き込まれます。

関心のある各 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()

上記のスニペットの最後の行に追加したように、ファイルを閉じることも忘れないでください。

with編集: 以下の Hooked のコメントによると、キーワードを使用すると、このスニペットは次のようになります。を使用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")
于 2013-04-11T19:04:02.343 に答える