爬虫入门-03-12306官网登录详解

爬虫入门-12306官网登录详解


一,首先我们要先通过浏览器抓包的方式搞清楚登录的流程,url,参数等

登陆=请求 POST请求

  • 请求url(str)
  • 请求方式(str)
  • 参数(str,bytes)

验证码校验
- https://kyfw.12306.cn/passport/captcha/captcha-check
- POST
- 参数:answer:52,36,117,68 login_site:E rand:sjrand

验证码发展

  • 1.数字或者字符串
  • 2.字符和数字生成一张图片,加载到浏览器上面(噪点,颜色,字体)
  • 3.坐标型验证码(滑动,根据文字找文字,根据文字找图片)机器原形(图片识别,分词,中文词找匹配图片)

12306压力

  • 计算压力(每个站有没有票)
  • 不能做缓存(大量的数据库操作)

下面开始代码实现

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib, urllib2
import ssl  # 12306证书是没有通过验证的,避过12306证书的问题
import cookielib  # cookie添加

# 避过证书验证,12306的证书是没有通过验证的
ssl._create_default_https_context = ssl._create_unverified_context

c = cookielib.LWPCookieJar()  # 生成一个存储
cookie = urllib2.HTTPCookieProcessor(c)
'''
同urlopen相同,比urlopen多得是会保存cookie
把这个存储器绑定到opener对象当中
'''
opener = urllib2.build_opener(cookie)
urllib2.install_opener(opener)

headerLoging = {
    "User-Agent":
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
}

def login():
    # 获取验证码图片和校验验证码
    req = urllib2.Request(
        "https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&0.6246852095798301")
    req.headers = headerLoging
    imgCode = opener.open(req).read()  # 图片二进制码
    with open("code.png", "wb") as fn:
        fn.write(imgCode)
    # 发送请求
    req = urllib2.Request("https://kyfw.12306.cn/passport/captcha/captcha-check")
    req.headers = headerLoging  # 添加头部信息
    code = raw_input("输入验证码:")
    data = {#低级错误  answer参数前面加了空格
        "answer": code,
        "login_site": "E",
        "rand": "sjrand"
    }

    data = urllib.urlencode(data)  # 需要把字典转换成字符串
    html = opener.open(req, data).read()
    # 下一步登陆
    print html


login()

你可能感兴趣的:(python爬虫,网络爬虫进阶之路)