質問

最初のHTML行オフ、次のようになります:

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

私は本当のhtmlを示すだろうが、私はそれをブロックする方法を知らないと言って申し訳ありません。

恥を感じています

BeautifulSoup(パイソン)または任意のその他の推奨スクリーンスクレイピング/解析方法を使用して、私はCSV形式に同じディレクトリに1200個の.htmファイルについて出力したいと思います。これは、最終的にはSQLデータベースに入ります。各ディレクトリには、年を表すと私は、少なくとも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に貼り付けたファイルの数千人を通過する必要はありませんことを認識した後、このポイントを取得するために数ヶ月私を取りました。 (推奨されません)また、私はフラストレーションから繰り返し私のコンピュータを蹴ることができることを理解していると、それはまだ動作します。私が近づいていると私はそれらのCSVファイルを作成するために次に何をすべきか知っている必要があります。助けたり、私のモニターは、最終的にはハンマーが打ち抜かれますしてください。

役に立ちましたか?

解決

あなたはの先頭にimport csvを追加することにより、 CSVモジュールをインポートする必要がありますファイルます。

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

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

そして、あなたが実際にあなたのループ内のHTML行からデータをプルする必要がある、と似

values = (td.fetchText() for td in row)
writer.writerow(values)

他のヒント

あなたは本当にあなたが立ち往生している理由を説明していない - 正確に動作していない何

次の行は、よくあなたの問題である可能性があります:

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

これはする必要があります。このように私には見えます

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

次の行:

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

それだけで(あなたの偶数行は、クラスのevenColor」を持っており、奇数行が持っている「oddColor」と仮定した場合)でも行を選ぶだろうように見えます。あなたがevenColorまたはoddColorのいずれかのクラスを持つすべての行をしたいと仮定すると、あなたはクラス値に一致するように正規表現を使用することができます:

for row in soup.findAll("tr", attrs={ "class" : re.compile(r"evenColor|oddColor") })

これは正常に見える、と(私は個人的にlxmlのを使用する傾向があるが)BeautifulSoupが、この場合に便利です。あなたは...あなたが得ることのデータを取り、任意の明白な問題もなくcsvモジュールを使用しているのうち、csvファイルを作ることができるはずです。

私はあなたが実際に問題が何であるかを教えする必要があると思います。 「それはまだ動作しません」問題descriptonではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top