python采集系统(小练手:爬取12306余票查询页面)
程序员文章站
2024-03-17 21:52:04
...
抽空去12306官网逛了一逛,发现直接爬余票是不是有点难啊哈哈哈,然后我发现了这样一个页面
进去页面之后是这样的
。。。。。。。。。这个东西爬起来是不是很简单,而且这个页面是半小时更新一次的,其实也蛮有参考价值的,所以就决定是它了,先爬一个小页面练练手,废话不多说,因为第一次入爬虫的坑,所以大概花了半天的时间终于爬取成功。
首先第一步,要找到数据源,也就是要爬取的url地址,我用的是火狐,谷歌也一样,之前电脑重装了,其实我谷歌用的比较多,后来重装了电脑之后就一直用火狐了,打开F12,你会发现有这样一个url地址。
再继续打开,哇,这些不就是我们需要的数据嘛,很激动有木有。。。
第二步,所以找到了数据源之后,当然是想办法把这些数据拿下来,这也是写爬虫最有意思的一步吧,所以我的想法是直接访问这个url,然后把拿到的数据处理一下,这个爬虫基本就写完了。
好了,到这一步,我已经把数据拿下来了,先感受一下
到这里,可能有同学已经这样了
什么鬼东西。。
冷静,我们先来分析一下这些数据,发现还是有迹可循的
红框的部分其实就是我们的余票信息有木有,然后发现黄色的框就是我们的位置信息,这样其实这个数据也不是很乱嘛,所以费什么话,提取数据吧
。。。。
其实代码非常的简单,但是第一次入坑,写的不好,希望不要喷我。其实就是先访问这个url获取到我们需要的数据,然后正则去掉没有用的字符,然后最后遍历字典元素。# -*- coding: utf-8 -*- import urllib2 import json import re import ssl import time from bs4 import BeautifulSoup ssl._create_default_https_context = ssl._create_unverified_context def getList(): req = urllib2.Request('http://dynamic.12306.cn/otn/board/query') req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36') html = urllib2.urlopen(req).read() soup=BeautifulSoup(html,'lxml') #首先使用urllib2 和bs4两个库把页面下载下来 day1=time.strftime('%Y%m%d',time.localtime(time.time())) day2=int(time.strftime('%Y%m%d',time.localtime(time.time())))+1 day3=int(time.strftime('%Y%m%d',time.localtime(time.time())))+2 day4=int(time.strftime('%Y%m%d',time.localtime(time.time())))+3 #print day1,day2,day3,day4 #获取到当天的日期 soup = re.sub(re.compile('<html><body><p>|<\/p><\/body><\/html>'),"",str(soup)) #这块的正则是要去掉一些html元素 json_dict = json.loads(soup) print json_dict #遍历字典元素 for item in json_dict['data']['values']: print item.get("from_station_telecode_name"),item.get("to_station_telecode_name") print day1,"余票数量",item.get("values").get(str(day1)) print day2,"余票数量",item.get("values").get(str(day2)) print day3,"余票数量",item.get("values").get(str(day3)) print day4,"余票数量",item.get("values").get(str(day4)) print item return "" print getList()
最后的运行效果图:
顺带一提,我的python环境是eclipse+pydev。
上一篇: MySQL日志各类总结