您的位置:首页 > 编程语言 > Python开发

python采集系统(小练手:爬取12306余票查询页面)

2018-01-25 17:22 204 查看
抽空去12306官网逛了一逛,发现直接爬余票是不是有点难啊哈哈哈,然后我发现了这样一个页面



进去页面之后是这样的



。。。。。。。

。。这个东西爬起来是不是很简单,而且这个页面是半小时更新一次的,其实也蛮有参考价值的,所以就决定是它了,先爬一个小页面练练手,废话不多说,因为第一次入爬虫的坑,所以大概花了半天的时间终于爬取成功。

首先第一步,要找到数据源,也就是要爬取的url地址,我用的是火狐,谷歌也一样,之前电脑重装了,其实我谷歌用的比较多,后来重装了电脑之后就一直用火狐了,打开F12,你会发现有这样一个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()
其实代码非常的简单,但是第一次入坑,写的不好,希望不要喷我。其实就是先访问这个url获取到我们需要的数据,然后正则去掉没有用的字符,然后最后遍历字典元素。

最后的运行效果图:





顺带一提,我的python环境是eclipse+pydev。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: