实验室同学需要,帮他写的一个扒取网页数据的小脚本。网页比较简单,是一个很普通的静态页面。
github:https://github.com/finalObject/wormForRadar
在网页上进行请求之后可以发现,其实需要的网页就是一个按照请求数据的日期组织的一个链接,所以基本思路就是根据当天日期生成昨天两个时间点的链接,请求之后解析需要的字段,追加到http://finalobject.cn/zju/wyoming-data.txt文件里就行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#!/usr/bin/python import urllib.request as myUrl import re import datetime # 每天中午12点执行,获取昨天00和12时的数据 nowTime = datetime.datetime.now() yesterday = nowTime+datetime.timedelta(hours=-24) path = '/home/wwwroot/default/zju/' link=['00','00'] name=['00','00'] link[0] = yesterday.strftime('YEAR=%Y&MONTH=%m&FROM=%d00&TO=%d00&STNM=58457') link[1] = yesterday.strftime('YEAR=%Y&MONTH=%m&FROM=%d12&TO=%d12&STNM=58457') name[0] = yesterday.strftime('%Y-%m-%d-00') name[1] = yesterday.strftime('%Y-%m-%d-12') for i in range(2): req = myUrl.urlopen('http://weather.uwyo.edu/cgi-bin/sounding?region=naconf&TYPE=TEXT%3ALIST&'+link[i]) buf=req.read() buf= buf.decode('utf-8') loc = re.search(r'<H2>.*?</H2>',buf).span() title = buf[loc[0]+4:loc[1]-5] loc1 = re.search(r'<H2>.*?</H2>',buf).span()[1] loc2 = re.search(r'<H3>.*?</H3>',buf).span()[0] buf = buf[loc1+7:loc2-7] f=open(path+"wyoming-data.txt","a"); f.write(title) f.write('\n') f.write(buf) f.write('\n\n') f.close |
直接给这个脚本添加执行权限,然后放到服务器的/root/bin/目录下
执行
1 |
crontab -e |
crontab是一个linux下管理定时任务的软件,-e代表编辑配置文件,输入如下内容
1 2 3 |
SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 15 12 * * * getWeb.py |
如果只输入第三行,貌似很容易出现问题,所以最好还是配置一下shell和path。一开始写的是12点执行一次,但是今天第一天运行的时候,发现返回了一个503错误,百度之后发现说是对方服务器的问题,担心可能是整点时间下对面服务器也在更新数据什么的,所以的脚本执行时间往后延迟了15分钟。
默认情况下可以使用
1 |
cat /var/spool/mail/root |
来查看定时程序的输出信息,可以用来排错。
后续如果没有问题就不来更新了,如果明天还是不能正常执行,会进行后续的更新。可以考虑对原来python脚本里面的服务器请求进行异常处理,不停请求直到正常为止。