数模有一个题目要处理杭州自行车在每个站点可用数量和已经借出数量,这数据在www.hzbus.cn上可以获取,它是10分钟更新一次的。这些数据手动获取,需要不停的刷页面,从6:00am到9:00pm,显然不可取。
 
过程:
先用Chrome抓包,找到了相应数据的页面URL,然后写个脚本把此URL的html代码,并且设置计时器,保存到本地;分析html代码,获得数据所在处的特点,然后写个脚本提取它们,并保存到指定文件中.
 
具体:
1.抓包就掠过吧,Chrome还是有很多开发人员应该掌握的工具的
2.找到URL页面后,发现Python有现成代码可用(urllib2),保存到本地就很方便
代码:
import urllib2
import time
url='http://www.hzbus.cn/Page/BicyleSquare.aspx?rnd=2&area=10'
for i in range(1,110):
t1=time.time()
t1=int(t1)
#filename="D:/data.txt"
t0=time.strftime('%H-%M',time.localtime(time.time()))
print t0
filename='''D:/%s.txt'''%(t0)
f=open(filename, "w")
response = urllib2.urlopen(url) html = response.read() f.write("%s\n" % (html))
t2=time.time()
t2=int(t2)
t3=t1-t2
time.sleep(600-t3-2)
print i
print "OK"
3.计时:10分钟计时一次,我使用sleep函数,不过urllib那里的response时间要好几秒,这会积少成多导致计时不准确,需要sleep时候减去消耗的时间。另外发现sleep函数比设定时间多sleep2秒,不知道为什么
4.本地数据处理:自行车数量,总数是21,不过已经借出数量(data1)和可用数量(data2),可能是1位数,可能是2位数,需要分类讨论。用正则的话,第一我不熟练,第二没必要。用filter函数过滤出所有数字,发现除了需要的两个data,还有html页面中的font-size,吐槽一下写那个页面的人,css什么的没有完全分离。。然后获取的数据可以是122112012也可以是120122112两种情况,都是先去掉首尾的12(表示字体大小)然后发现两个data之间的12,也是字体大小,判断,如果filter之后的子串s[4:6]是12那么表示data1是两位数,data2取后几位就好;如果s[3:5]是12那么表示data1是一位数,...
5.然后是遍历所有保存的html文件了,(其实我保存为“小时-分钟.txt”的格式),发现os模块的listdir和系统的dir或者linux的ls命令一样,都是按照文件名字按顺序列出,这就省去了我们自行处理。
eg:
import os
allfile=os.listdir("D:/data/")
outfile=open("D:/result/result.txt", 'a')
for filename in allfile:
    f=open("D:/data/"+filename)
    for eachline in f:
        outfile.write(eachline)
    f.close
6.用追加模式,保存数据到指定文件  参数是a表示append
 
最终代码:
import os
allfile=os.listdir("D:/data/")#列出目录下所有文件
#filename="D:/02-54.txt"
resultfile="D:/result/result.txt" #最终所有处理好的数据存储的文件
f=open(resultfile,"a") #a: append,追加模式
for filename in allfile:
file=open("D:/data/"+filename)
for i in range(1,89):
line=file.readline()
if i==88:
result=filter(str.isdigit, line) if result[4:6]=="12":
data1=result[2:4]
data2=result[6:len(result)-2]
f.write("%s %s\n" % (data1, data2)) if result[3:5]=="12":
data1=result[2:3]
data2=result[5:len(result)-2]
f.write("%s %s\n" % (data1, data2))

当Python与数模相遇的更多相关文章

  1. Python数模笔记-Sklearn(1) 介绍

    1.SKlearn 是什么 Sklearn(全称 SciKit-Learn),是基于 Python 语言的机器学习工具包. Sklearn 主要用Python编写,建立在 Numpy.Scipy.Pa ...

  2. Python数模笔记-(1)NetworkX 图的操作

    1.NetworkX 图论与网络工具包 NetworkX 是基于 Python 语言的图论与复杂网络工具包,用于创建.操作和研究复杂网络的结构.动力学和功能. NetworkX 可以以标准和非标准的数 ...

  3. Python数模笔记-NetworkX(3)条件最短路径

    1.带有条件约束的最短路径问题 最短路径问题是图论中求两个顶点之间的最短路径问题,通常是求最短加权路径. 条件最短路径,指带有约束条件.限制条件的最短路径.例如,顶点约束,包括必经点或禁止点的限制:边 ...

  4. Python数模笔记-StatsModels 统计回归(4)可视化

    1.如何认识可视化? 图形总是比数据更加醒目.直观.解决统计回归问题,无论在分析问题的过程中,还是在结果的呈现和发表时,都需要可视化工具的帮助和支持. 需要指出的是,虽然不同绘图工具包的功能.效果会有 ...

  5. Python数模笔记-StatsModels 统计回归(1)简介

    1.关于 StatsModels statsmodels(http://www.statsmodels.org)是一个Python库,用于拟合多种统计模型,执行统计测试以及数据探索和可视化. 2.文档 ...

  6. Python数模笔记-Scipy库(1)线性规划问题

    1.最优化问题建模 最优化问题的三要素是决策变量.目标函数和约束条件. (1)分析影响结果的因素是什么,确定决策变量 (2)决策变量与优化目标的关系是什么,确定目标函数 (3)决策变量所受的限制条件是 ...

  7. Python小白的数学建模课-A3.12 个新冠疫情数模竞赛赛题与点评

    新冠疫情深刻和全面地影响着社会和生活,已经成为数学建模竞赛的背景帝. 本文收集了与新冠疫情相关的的数学建模竞赛赛题,供大家参考,欢迎收藏关注. 『Python小白的数学建模课 @ Youcans』带你 ...

  8. Python数模笔记-Sklearn(2)样本聚类分析

    1.分类的分类 分类的分类?没错,分类也有不同的种类,而且在数学建模.机器学习领域常常被混淆. 首先我们谈谈有监督学习(Supervised learning)和无监督学习(Unsupervised ...

  9. Python数模笔记-Sklearn(4)线性回归

    1.什么是线性回归? 回归分析(Regression analysis)是一种统计分析方法,研究自变量和因变量之间的定量关系.回归分析不仅包括建立数学模型并估计模型参数,检验数学模型的可信度,也包括利 ...

随机推荐

  1. BZOJ5418 NOI2018屠龙勇士(excrt)

    显然multiset求出每次用哪把剑.注意到除了p=1的情况,其他数据都保证了ai<pi,于是先特判一下p=1.比较坑的是还可能存在ai=pi,稍微考虑一下. 剩下的部分即解bix≡ai(mod ...

  2. BZOJ 4173: 数学

    4173: 数学 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 462  Solved: 227[Submit][Status][Discuss] D ...

  3. BZOJ刷题指南(转)

    基础(65) 巨水无比(4):1214.3816:2B题:1000A+B:2462:输出10个1 模拟/枚举/暴力(15):4063傻子模拟:1968小学生暴力:1218前缀和暴力:3856读英文:4 ...

  4. HDU 4303 Hourai Jeweled 解题报告

    HDU 4303 Hourai Jeweled 解题报告 评测地址: http://acm.hdu.edu.cn/showproblem.php?pid=4303 评测地址: https://xoj. ...

  5. POJ 2502 Subway / NBUT 1440 Subway / SCU 2186 Subway(图论,最短距离)

    POJ 2502 Subway / NBUT 1440 Subway / SCU 2186 Subway(图论,最短距离) Description You have just moved from a ...

  6. git 中断 merge

    git 版本 >= 1.6.1 git reset --merge git 版本 >= 1.7.4 git merge --abort

  7. 浅谈移动端 View 的显示过程

    作者:个推安卓开发工程师 一七 随着科技的发展,各种移动端早已成为人们日常生活中不可或缺的部分,人们使用移动端产品工作.社交.娱乐……移动端界面的流畅性已经成为影响用户体验的重要因素之一.那么你是否思 ...

  8. JavaScript中的两种全局对象

    这里总结的东西特别适合先学习c/c++, Java这类标准语言再学JS的童鞋们看,因为JS在程序执行之前就会初始化一个全局对象,这个全局对象到底是什么是跟JS程序运行环境有关的. 根据JavaScri ...

  9. python爬虫 Scrapy2-- 爬取豆瓣电影TOP250

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  10. linux常用端口查询

    0 | 无效端口,通常用于分析操作系统1 | 传输控制协议端口服务多路开关选择器2 | 管理实用程序3 | 压缩进程5 | 远程作业登录7 | 回显9 | 丢弃11 | 在线用户13 | 时间17 | ...