我在bash中编写了一个程序(用Python调用另一个程序),将http://www.wsj.com/mdc/public/page/2_3021-activnyse-actives.html中的信息提取到.html文件中,然后将其转换为.xhtml,然后转换为.csv。这会循环一个循环,以便每隔一分钟左右重复一个小时。以下是bash代码:
#!/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 :(得分: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
感谢大家的意见。