2016-05-04 3 views
0

私はtxtファイルにいくつかのデータを持っていますが、私はこのファイルでいくつかの特定の単語を見つけようとしています。BeautifulSoup4は理由がないのに空のリストを返します

import re 
from bs4 import BeautifulSoup 


with open ("myfile.txt") as f: 
    soup = BeautifulSoup(f) 

    print (soup.find_all("DLC")) 

あり、少なくとも5 DLCは、ファイル内にあるが、出力は空のリストです。 soup = BeautifulSoup(f)soup = BeautifulSoup(f),"html.parser"と変更しましたが、機能しませんでした。文字列がファイル内にあることを知っているので、なぜ空のリストを返しますか?また、私はこのデータを取得したウェブサイトでは動作しません。この問題を解決するにはどうすればよいですか?

コメントの後に編集:たとえば、

<h1>Fallout 4'ün Far Harbor DLC fragmanı yayımlandı!</h1> 
<h2>Bethesda'nın yaptığı en geniş DLC geliyor</h2> 
+1

あなたは 'DLC'が文書に記載されていなければならないHTMLの一部を投稿してもらえますか?ありがとう。 – alecxe

+0

@alecxe編集されました。 – GLHF

+1

'find_all'は文字列ではなく要素を検索します。 – user2357112

答えて

2

あなたがsoup.find_all("DLC")を呼び出し、BeautifulSoup要素内のテキストDLCページのDLCタグ/要素のためではなくなります。

代わりに、あなたが(代わりにtextの現代BeautifulSoupthe argument is called stringに)text引数を使用するためのもの:

soup.find_all(text=lambda text: text and "DLC" in text) 
+0

それは私の問題を解決しました、私は今参照してください。しかし、単純な文字列を見つけるたびにラムダを作るべきですか?部分一致の場合は – GLHF

+0

@GLHFですが、ラムダ関数の代わりに正規表現を使用することもできます: 'soup.find_all(text = re.compile(" DLC "))'。正確で正確なマッチが必要な場合は、単に 'soup.find_all(text =" DLC ")'を使うことができます。 – alecxe

+0

re.compile()はlambdaと同じ出力を返します。私はそれを使用します。答えをありがとう。 – GLHF

関連する問題