2017-11-26 14 views
0

http://www.wsj.com/mdc/public/page/2_3021-activnyse-actives.htmlの情報を.htmlファイルにプルするbash(これはPythonの別のプログラムを呼び出します)にプログラムを書き、.htmlファイルを.xhtmlに変換してから.csvに変換します。これは1分ごとにプロセスを繰り返すようにループを実行します。以下は、bashのコードは次のとおりです。wget空のファイルを作成する

#!/bin/bash 

n=0 
while [ $n -lt 60 ] 
do 
    filename="$(date +"%Y-%m-%d-%H-%M-%S")" 
    wget -O - http://www.wsj.com/mdc/public/page/2_3021-activnyse-actives.html > "$filename.html" 
    java -jar tagsoup-1.2.1.jar --files "$filename.html" 
    python xhtmlToCsv.py "$filename.xhtml" > "$filename.csv" 
    ((n++)) 
    sleep 60 
done 

そして、ここではそれが呼び出すPythonプログラムです:

import sys 
import xml.dom.minidom 

document = xml.dom.minidom.parse(sys.argv[1]) 
tableElements = document.getElementsByTagName('table') 

print "exchange,symbol,company,volume,price,change" 
lines = tableElements[2].getElementsByTagName('td') 
n = 0 
data = [None] * 6 

for i in lines: 
    if n % 6 == 1: 
     del data[:] 
     data = [None] * 6 

    for node in i.childNodes: 
     if n % 6 + 1 < 6: 
      data[n%6+1] = node.nodeValue 
      if n%6+1 == 3: 
       data[n%6+1] = data[n%6+1].replace(",", "") 

    for items in i.getElementsByTagName('a'): 
     j = i.getElementsByTagName('a')[0] 
     for node in j.childNodes: 
      data[0] = 'NYSE' 
      data[1] = node.nodeValue[node.nodeValue.index('(')+1:node.nodeValue.index(')')] 
      data[2] = node.nodeValue[0:node.nodeValue.index(" (")] 

    if n % 6 == 5 and n > 6: 
     print data[0] + "," + data[1] + "," + data[2] + "," + data[3] + "," + data[4] + "," + data[5] 
    n+=1 

私は得ることはありませんどのような、しかし、なぜ約コードによって生成されたすべての第三の.htmlファイルです空のファイルを返します。コードに何か問題がありますか、それとも私の接続ですか?接続だけの場合は、空のファイルを破棄してもう一度やり直す方法がありますか?

+0

Pythonですべてを書くことで、エラー状態をよりよく制御できます。 'requests'(または普通の' urllib2')を使ってデータを取得し、 'BeautifulSoup'を使ってHTMLの"タグスープ "をナビゲートすることができます。 –

+0

'print()'を使用して変数に値を表示し、コードのどの部分が実行されるかは問題の発見に役立ちます。デバッガの使い方を学ぶ。 – furas

+0

まず、ファイルからすべてのデータを読み込んで、何かが得られたか、空の文字列があるかどうかを確認する必要があります。そして、あなたはファイルを再びダウンロードするためにbashで使うことができるエラーコードで 'exit()'することができます。しかし、ファイルをダウンロードしてデータを取得するには、 'wget'や' java'の代わりにpythonを使用する方が簡単でしょう。 – furas

答えて

0

更新:私はそれを理解しました。私がしなければならなかったのは、結果の.csvファイルの行数を調べることだけでした。それが1だった場合は、データが転送されなかったことを示し、その繰り返しのファイルは破棄されます。

a=($(wc $filename.csv)) 
x=${a[0]} 
if [ $x -eq 1 ] 
then 
    rm $filename.html 
    rm $filename.xhtml 
    rm $filename.csv 
else 
    ((n++)) 
    sleep 60 
fi 

あなたのご意見ありがとうございました。