我用 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 文件返回一个空文件。代码有问题,还是只是我的连接?如果只是连接,有没有办法扔掉空文件并重试?
更新:我想通了。我所要做的就是对生成的 .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
谢谢各位的意见。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句