数模有一个题目要处理杭州自行车在每个站点可用数量和已经借出数量,这数据在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. 【设计模式】—— 访问者模式Visitor

    前言:[模式总览]——————————by xingoo 模式意图 对于某个对象或者一组对象,不同的访问者,产生的结果不同,执行操作也不同.此时,就是访问者模式的典型应用了. 应用场景 1 不同的子类 ...

  2. LOJ2542 PKUWC2018随机游走(概率期望+容斥原理)

    如果直接dp,状态里肯定要带上已走过的点的集合,感觉上不太好做. 考虑一种对期望的minmax容斥:其中Max(S)为遍历完S集合的期望步数,Min(S)为遍历到S集合中一个点的期望步数.当然才不管怎 ...

  3. CF86D Powerful array

    题意翻译 题意:给出一个n个数组成的数列a,有t次询问,每次询问为一个[l,r]的区间,求区间内每种数字出现次数的平方×数字的值 的和. 输入:第一行2个正整数n,t. 接下来一行n个正整数,表示数列 ...

  4. SPOJ QTREE2 (LCA - 倍增 在线)

    You are given a tree (an undirected acyclic connected graph) with N nodes, and edges numbered 1, 2, ...

  5. 8.30 牛客OI赛制测试赛1 F题 子序列

    题目描述 给出一个长度为n的序列,你需要计算出所有长度为k的子序列中,除最大最小数之外所有数的乘积相乘的结果 输入描述: 第一行一个整数T,表示数据组数.对于每组数据,第一行两个整数N,k,含义如题所 ...

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

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

  7. Gulp 笔记

    Gulp是一款自动化构建工具 用npm安装 npm install -g gulp npm install --save-dev gulp 分别在全局和项目目录里安装. 然后在项目目录里创建gulpf ...

  8. vue.js初识(一)

    vue.js安装 官网:http://cn.vuejs.org/ 官方安装介绍:http://cn.vuejs.org/v2/guide/installation.html MVVM框架:View.V ...

  9. Hadoop生态圈-Azkaban实现文件上传到hdfs并执行MR数据清洗

    Hadoop生态圈-Azkaban实现文件上传到hdfs并执行MR数据清洗 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果你没有Hadoop集群的话也没有关系,我这里给出当时我 ...

  10. [转载]使用 NuGet 管理项目库

    原文:http://msdn.microsoft.com/zh-cn/magazine/hh547106.aspx 无论多么努力,Microsoft 也没办法提供开发人员所需要的每一个库. 虽然 Mi ...