2012-04-01 10 views
1

私の全体的な目標は、テキスト内の特定の単語を含むタグを分離し、テキストファイルにのみ印刷することです。BeauitfulSoupでテキストを抽出した後、その抽出されたデータで何ができますか?

これまでは、特定のタグ(この場合は)を抽出して、テキストファイルに出力することができました。

私の質問は、一度抽出したすべてのテキストを取得していますが、どうすればいいですか?私は、特定の単語を分離して、必要なものだけテキストをさらにトリミングする方法を見つけ出すのに苦労しています。私に返される何

import urllib2 
from BeautifulSoup import BeautifulSoup 

url = 'http://www.website.com' 
page = urllib2.urlopen(url) 
soup = BeautifulSoup(page.read()) 

page = soup.findAll('title') 

for element in page:  
    print element 

file_name = raw_input("What do you want to name the file?> ") 
text_file = open("/Users/user1/Projects/%s.txt" % file_name, "w") 
text_file.write("%s" % page) 
text_file.close() 

は次のとおりです:ここで

は、私がこれまで持っているものである

$<title>food</title> 
<title>ball</title> 
<title>car</title> 
<title>desk</title> 
<title>blue food</title> 
<title>green food</title> 
<title>red ball</title> 

私は「食べ物」を含めるだけで、印刷結果になるだろうどのように?

答えて

0

.stringを使用して要素の内容を取得できます。あなただけfoodで結果を含めたい場合は、そのためのチェックを追加します。exempleについては

 
for element in page: 
    if 'food' in element.string: 
     print element.string 
+0

恐ろしいです!ありがとう、それは完全に働いた。だから、.stringを追加することで結果を文字列に変換できますか?また、それに関係なく、私が必要とするものを返す方法はありますか?たとえば、「食べ物」と「食べ物」の両方が必要な場合。 –

+0

はい、その要素の開始タグと終了タグの間の文字列です。 –

+0

@AlexRamadan:あなたは 'food'と' Food'のどちらかを別々にチェックすることができます(論理OR演算子を使用します)。また、柔軟性を高めるために、正規表現を使用することもできます。 (これはまた、 "食べ物"のようなもののマッチを除いて、 "全体の単語としてのみ"食べ物にマッチするようなことをさせるでしょう –

0

をページからデータを抽出し、CSVファイルに入れたい場合は、あなたがそのように行うことができます。

import urllib2 
from BeautifulSoup import BeautifulSoup 
import csv 

file_name = raw_input("What do you want to name the file?> ") 
c = csv.writer(open("%s.csv" % (file_name), "a"),delimiter=";") # Open the CSV File and Write in 

url = 'http://www.website.com' 
page = urllib2.urlopen(url) 
soup = BeautifulSoup(page.read()) 

page = soup.findAll('title') 

for element in page:  
    element = element.text.encode('utf-8') 
    c.writerow([element]) 

あなたのCSVファイルは、Excelやテキストエディタソフトウェアで使用できます。役に立つことがあります 私のコードは完璧ではありませんが、とにかく、うまくいくはずです:)

関連する問題