爬虫類入門-03-12306公式サイト登録詳細


爬虫類入門-12306公式サイト登録詳細
まず、ブラウザでパッケージをつかむことで、ログインの流れ、url、パラメータなどを明らかにします.
ログイン=POSTリクエストを要求
  • 要求url(str)
  • 要求方式(str)
  • パラメータ(str,bytes)
  • 検証コード検証-https://kyfw.12306.cn/passport/captcha/captcha-check-POST-パラメータ:answer:52,36117,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()