数模有一个题目要处理杭州自行车在每个站点可用数量和已经借出数量,这数据在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. jQuery简单效果

  2. 当数据库字段与model字段规则不一致时候 需要在xml里面手工转换

  3. [代码]--IIS发布网站浏览之后看到的是文件目录 & Internal Server Error 处理程序“ExtensionlessUrlHandler-ISAPI-4.0_64bit”在其模块列表中有一个错误模块“IsapiModule” 解决方法 & App_global.asax.pduxejp_.dll”--“拒绝访问。 ”

    Q:IIS发布网站浏览之后看到的是文件目录 A:它出现了一个说到.NET4.0 更高框架什么的错误,所以我将 .NTE CRL版本由4.0改为2.0了,改为2.0后就出现了只能浏览文件目录了.改为4. ...

  4. github如何添加新的分支

    需求:甲建立分支分给乙步骤:在甲创建的项目仓库里边点右上角的按钮 就可以通过名字搜索了. 在乙的右上角 再选中Repositories就可以看到所有的 存储库 了

  5. MT【78】几张动态图

  6. 【字符串算法2】浅谈Manacher算法

    [字符串算法1] 字符串Hash(优雅的暴力) [字符串算法2]Manacher算法 [字符串算法3]KMP算法 这里将讲述  字符串算法2:Manacher算法 问题:给出字符串S(限制见后)求出最 ...

  7. 洛谷 P1310 表达式的值 解题报告

    P1310 表达式的值 题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. "× "运算优先于"⊕"运算,即计算表 ...

  8. apigateway-kong(三)Proxy规则

    本篇详细记录了Kong的代理功能及其路由功能和内部工作. Kong公开了几个可以通过两个配置属性进行调整的接口:proxy_listen,默认8000,它定义Kong将接受来自客户端的公共流量并将其代 ...

  9. Eclipse安装与使用

    Step1:启动Eclipse,在菜单中选择“文件 --> 新建 --> Java项目”,弹出对话框: Step2:填入项目名称,点击“完成”,创建项目成功,可以看到在 E:\java\w ...

  10. Python(3)---从迭代器到异步IO

    whenif 关注 2017.02.13 23:48* 字数 1750 阅读 250评论 0喜欢 8 目录 1. 迭代(iteration)与迭代器(iterator) 1.1 构建简单迭代器 1.2 ...