2009-05-28 10 views
2

私のハードドライブ上にある1200個以上の.htmファイルの行を削り取ろうとしています。私のコンピュータでは、彼らはここに 'ファイル:///home/phi/Data/NHL/pl07-08/PL020001.HTM'です。これらの.htmファイルは、* 20001.htmから* 21230.htmまで順次です。私の計画は、スプレッドシートアプリケーションを使用してMySQLまたはSQLiteでデータを最終的に投げ込むことです。このプロセスからクリーンな.csvファイルを取得することができればまっすぐです。複数のhtmlファイルをCSVにスクラップ

これはコード(Python)での私の最初の試みであり、私は厄介なペンティアムIVにUbuntu 9.04をインストールしました。言うまでもなく、私はnewbであり、いくつかのロードブロッキングを持っています。

ディレクトリ内のすべてのファイルを順番に処理するにはどうすればよいですか。これを機械化できますか? Mechanical/Python/BeautifulSoupは 'file:///'スタイルのURLを読んだり、/home/phi/Data/NHL/pl07-08/PL020001.HTMにそれを指す別の方法がありますか?これを100または250ファイル単位で行うか、すべて1230を送信するのは賢明ですか?

この「<tr class="evenColor">」で始まり、「</tr>」で終わる行が必要です。理想的には、「SHOT」|「MISS」|「GOAL」を含む行だけが必要ですが、行全体(すべての列)が必要です。 "GOAL"は太字であるため、これを指定する必要がありますか? htmファイルごとに3つのテーブルがあります。

また、親ファイルの名前(pl020001.htm)を私が掻き集める行に含めることを願っています。私はそれをどこから始めるべきかも知らない。これはこれまで私が持っているものです:

#/usr/bin/python 
from BeautifulSoup import BeautifulSoup 
import re 
from mechanize import Browser 

mech = Browser() 
url = "file:///home/phi/Data/NHL/pl07-08/PL020001.HTM" 
##but how do I do multiple urls/files? PL02*.HTM? 
page = mech.open(url) 

html = page.read() 
soup = BeautifulSoup(html) 
##this confuses me and seems redundant 
pl = open("input_file.html","r") 
chances = open("chancesforsql.csv,"w") 

table = soup.find("table", border=0) 
for row in table.findAll 'tr class="evenColor"' 
#should I do this instead of before? 
outfile = open("shooting.csv", "w") 

##how do I end it? 

私はIDLEなどを使用してください。 Ubuntu 9.04のターミナルだけ?

答えて

1

機械化する必要はありません。私はHTMLコンテンツを正確には知らないので、最初に一致するものを見つけようとします。このように:

import glob 
from BeautifulSoup import BeautifulSoup 

for filename in glob.glob('/home/phi/Data/*.htm'): 
    soup = BeautifulSoup(open(filename, "r").read()) # assuming some HTML 
    for a_tr in soup.findAll("tr", attrs={ "class" : "evenColor" }): 
     print a_tr 

次に、必要なものを選択して、標準出力にカンマ(およびリダイレクト)をファイルに書き出します。または、csvをPythonで記述します。

+0

は、行のHTMLコンテンツです: の 56 PP 1 目的 可能な場合は、再度、私が掻き行の列として行全体を好きとファイル名(pl020001.htm)を含むであろう。 – northnodewolf

+0

'python経由でCSVを書く' これを行う方法はわかりませんが、知りたいです。私は 'import csv'が必要ですか? – northnodewolf

+0

@northnodewolf:HTMLテーブルから作成するHTML構造とCSVについての新しい事実を示す新しい質問を投稿してください。 –

0

MYYNの回答は私にとって素晴らしいスタートに見えます。私は運を持っていたことを指摘したいことの一つは次のとおりです。

import glob 
    for file_name in glob.glob('/home/phi/Data/*.htm'): 
     #read the file and then parse with BeautifulSoup 

私は両方osglob輸入はディレクトリ内のファイルを走るために実際に有用であることが判明しました。

また、このようにforループを使用すると、出力ファイルで使用するために変更できるfile_nameがあり、出力ファイル名が入力ファイル名と一致するようになります。だからここ

+0

よく見えます、ありがとう。 – miku

関連する問題