当Python与数模相遇

简介: 数模有一个题目要处理杭州自行车在每个站点可用数量和已经借出数量,这数据在www.hzbus.cn上可以获取,它是10分钟更新一次的。这些数据手动获取,需要不停的刷页面,从6:00am到9:00pm,显然不可取。
数模有一个题目要处理杭州自行车在每个站点可用数量和已经借出数量,这数据在 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))
目录
相关文章
|
6月前
|
关系型数据库 MySQL C语言
【Python21天学习挑战赛】—Day1:学习规划,我与python的相遇
【Python21天学习挑战赛】—Day1:学习规划,我与python的相遇
|
6月前
|
开发者 Python
【备战蓝桥杯】如何使用Python 内置模块datetime去计算我与CSDN相遇的天数
【备战蓝桥杯】如何使用Python 内置模块datetime去计算我与CSDN相遇的天数
69 1
|
Python
python 三人跑步,相遇题
python 三人跑步,相遇题
87 1
|
10天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
1天前
|
Python
不容错过!Python中图的精妙表示与高效遍历策略,提升你的编程艺术感
本文介绍了Python中图的表示方法及遍历策略。图可通过邻接表或邻接矩阵表示,前者节省空间适合稀疏图,后者便于检查连接但占用更多空间。文章详细展示了邻接表和邻接矩阵的实现,并讲解了深度优先搜索(DFS)和广度优先搜索(BFS)的遍历方法,帮助读者掌握图的基本操作和应用技巧。
13 4
|
1天前
|
设计模式 程序员 数据处理
编程之旅:探索Python中的装饰器
【10月更文挑战第34天】在编程的海洋中,Python这艘航船以其简洁优雅著称。其中,装饰器作为一项高级特性,如同船上的风帆,让代码更加灵活和强大。本文将带你领略装饰器的奥秘,从基础概念到实际应用,一起感受编程之美。
|
3天前
|
存储 人工智能 数据挖掘
从零起步,揭秘Python编程如何带你从新手村迈向高手殿堂
【10月更文挑战第32天】Python,诞生于1991年的高级编程语言,以其简洁明了的语法成为众多程序员的入门首选。从基础的变量类型、控制流到列表、字典等数据结构,再到函数定义与调用及面向对象编程,Python提供了丰富的功能和强大的库支持,适用于Web开发、数据分析、人工智能等多个领域。学习Python不仅是掌握一门语言,更是加入一个充满活力的技术社区,开启探索未知世界的旅程。
13 5
|
1天前
|
机器学习/深度学习 JSON API
Python编程实战:构建一个简单的天气预报应用
Python编程实战:构建一个简单的天气预报应用
10 1
|
1天前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
14 2
|
3天前
|
人工智能 数据挖掘 开发者
探索Python编程:从基础到进阶
【10月更文挑战第32天】本文旨在通过浅显易懂的语言,带领读者从零开始学习Python编程。我们将一起探索Python的基础语法,了解如何编写简单的程序,并逐步深入到更复杂的编程概念。文章将通过实际的代码示例,帮助读者加深理解,并在结尾处提供练习题以巩固所学知识。无论你是编程新手还是希望提升编程技能的开发者,这篇文章都将为你的学习之旅提供宝贵的指导和启发。

热门文章

最新文章