欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-17 21:52:04
...

抽空去12306官网逛了一逛,发现直接爬余票是不是有点难啊哈哈哈,然后我发现了这样一个页面

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

进去页面之后是这样的

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

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


首先第一步,要找到数据源,也就是要爬取的url地址,我用的是火狐,谷歌也一样,之前电脑重装了,其实我谷歌用的比较多,后来重装了电脑之后就一直用火狐了,打开F12,你会发现有这样一个url地址。

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


再继续打开,哇,这些不就是我们需要的数据嘛,很激动有木有python采集系统(小练手:爬取12306余票查询页面)。。。

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

第二步,所以找到了数据源之后,当然是想办法把这些数据拿下来,这也是写爬虫最有意思的一步吧,所以我的想法是直接访问这个url,然后把拿到的数据处理一下,这个爬虫基本就写完了。


好了,到这一步,我已经把数据拿下来了,先感受一下

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

到这里,可能有同学已经这样了

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

什么鬼东西。。

冷静,我们先来分析一下这些数据,发现还是有迹可循的

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

红框的部分其实就是我们的余票信息有木有,然后发现黄色的框就是我们的位置信息,这样其实这个数据也不是很乱嘛,所以费什么话,提取数据吧

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

# -*- 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采集系统(小练手:爬取12306余票查询页面)


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

顺带一提,我的python环境是eclipse+pydev。


上一篇: MySQL日志各类总结

下一篇: