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

抽空去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。


  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值