1

まず、html 行は次のようになります。

<tr class="evenColor"> blahblah TheTextIneed blahblah and ends with </tr>

実際の html を表示しますが、それをブロックする方法がわかりません。恥ずかしい

BeautifulSoup (Python) またはその他の推奨される画面スクレイピング/解析方法を使用して、同じディレクトリにある約 1200 の .htm ファイルを CSV 形式で出力したいと考えています。これは最終的に SQL データベースに入ります。各ディレクトリは 1 年を表しており、私は少なくとも 5 年を計画しています。

glob私はいくつかのアドバイスからこれを行うための最良の方法としてふざけてきました。これは私がこれまでに持っていて、立ち往生しているものです。

import glob
from BeautifulSoup import BeautifulSoup

for filename in glob.glob('/home/phi/data/NHL/pl0708/pl02*.htm'):
#these files go from pl020001.htm to pl021230.htm sequentially
    soup = BeautifulSoup(open(filename["r"]))
    for row in soup.findAll("tr", attrs={ "class" : "evenColor" })

これは醜いことはわかっていますが、このようなことを試みるのは初めてです。何千ものファイルを手動でコピーして Excel に貼り付ける必要がないことに気付いた後、この 1 つの問題に到達するまでに数か月かかりました。また、フラストレーションからコンピューターを繰り返しキックできることにも気付きましたが、それでも動作します (お勧めしません)。CSV ファイルを作成するために次に何をすべきかを知る必要があります。助けてください。そうしないと、モニターがついにハンマーで殴られてしまいます。

4

3 に答える 3

4

ファイルの先頭に追加して、 csv モジュールをインポートする必要があります。import csv

次に、次のように、行のループの外側に csv ファイルを作成するために何かが必要になります。

writer = csv.writer(open("%s.csv" % filename, "wb"))

次に、ループ内の html 行から実際にデータを引き出す必要があります。

values = (td.fetchText() for td in row)
writer.writerow(values)
于 2009-07-06T11:17:50.760 に答える
4

なぜ行き詰まっているのかを本当に説明していません - 正確に機能していないのは何ですか?

次の行が問題になる可能性があります。

soup = BeautifulSoup(open(filename["r"]))

これは次のようになります。

soup = BeautifulSoup(open(filename, "r"))

次の行:

for row in soup.findAll("tr", attrs={ "class" : "evenColor" })

偶数行のみを選択するように見えます(偶数行にはクラス「evenColor」があり、奇数行には「oddColor」があると仮定します)。偶数色または奇数色のいずれかのクラスを持つすべての行が必要であると仮定すると、正規表現を使用してクラス値を一致させることができます。

for row in soup.findAll("tr", attrs={ "class" : re.compile(r"evenColor|oddColor") })
于 2009-07-06T10:06:04.230 に答える
2

これは問題ないようで、これには BeautifulSoup が役立ちます (ただし、個人的には lxml を使用する傾向があります)。取得したデータを取得してcsvファイルを作成できるはずです.csvモジュールを使用すると、明らかな問題はありません...

問題が何であるかを実際に私たちに伝える必要があると思います。「それでも動かない」は問題記述ではありません。

于 2009-07-06T10:02:33.317 に答える