urllib2 实现简单爬取12306网站

开发工具:python2.7

主要是用的库:urllib2

爬取对象:12306购票系统

1、首先我们的任务是选取合适的网页入口,打开12306官网:

这里写图片描述

我们先试试进入余票查询:
这里写图片描述

第一次进入这个网站我们发现报错了,在网址http处红色显示证书不符合要求,我们暂时忽略。点击查询按钮,这时候我们看到页面并没有变化。我们按F12进入开发者工具看看:
这里写图片描述
我们进入Network选项,再次点击查询发现下方显示拒绝访问,看来我们无法从这个接口进入网站。
我们返回之前的页面点击购票:这里写图片描述
再次点击查询,这下我们看到了我们查询的结果,url=https://kyfw.12306.cn/otn/leftTicket/init
然后我们用代码来抓取一下这个url:

import urllib2
#我们定义一个函数来抓取这个网站
def getList():
        url='https://kyfw.12306.cn/otn/leftTicket/init'
        req = urllib2.urlopen(url)
        html = req.read()#获取网站源代码数据
        #print html 
getList() #我们尝试打印出来看看

这里写图片描述

显示是一大长串的json文件。

print type(html)
type ‘str’

我们现在把str转换成python能处理的dict

import json
dict = json.loads(html)

下面我们通过F12开发者工具查看我们需要的车辆信息在什么地方。
通过一番查找我们发现我们需要的信息:这里写图片描述

我们通过对比可以看到我们为难刚才打印出来的网页信息与我们在F12中找到的是吻合的。我们想要的信息都在data里的键值对里。

2、我们提取我们想要的信息:
import urllib2
import ssl
import json
import time
ssl._create_default_https_context = ssl._create_unverified_context
#关闭证书验证

#< > 是个对象 需要方法进行操作
def getList():
    req = urllib2.urlopen('https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2017-02-25&leftTicketDTO.from_station=CSQ&leftTicketDTO.to_station=CDW&purpose_codes=ADULT')#打开网页
    html = req.read()#获取网站源代码数据
    dict = json.loads(html)#把str转换成python能处理的dict
    return dict['data']
list_s = getList()
#for i in list_s:
    print i['queryLeftNewDTO']['station_train_code'] + '*********' + i['queryLeftNewDTO']['swz_num']+'*****' +i['queryLeftNewDTO']['start_time'] 打印出车辆信息、票数以及发车时间

ps:这里需要提到一点,我们在运行代码过程中可能无法打开网页,主要是证书无法识别的原因,我们用ssl库关掉证书认证就可以正常访问网页了。

运行结果:
这里写图片描述

3、实现电话短信提醒
4、完成验证登陆,自动购买车票

上面两点还没完成,待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值