Browse Source

add get_code_pic2 获取验证码

liuyuqi-dellpc 1 year ago
parent
commit
17060a4158
5 changed files with 56 additions and 6 deletions
  1. 19 0
      README.md
  2. 0 0
      data/pic2/.gitkeep
  3. 2 0
      fuck12306/api.py
  4. 25 2
      fuck12306/crawl_12306.py
  5. 10 4
      main.py

+ 19 - 0
README.md

@@ -4,6 +4,11 @@
 
 ## Develop
 
+**依赖:**
+
+* mysql
+* redis
+
 打开 conf/config.ini 配置邮件提醒。
 
 监控余票,有余票时自动邮件推送:
@@ -12,5 +17,19 @@
     crawl12306.monitor()
 ```
 
+pc网页版,模拟操作抢票:
+``` 
+    python fuck12306/splinter_12306.py
+```
+
+
+生成验证码,保存到 data/pic 目录中:
+```
+    crawl12306.get_code_pic(299)
+    crawl12306.get_code_pic2(10000)
+```
+
+
+
 ## Licenses
 

+ 0 - 0
data/pic2/.gitkeep


+ 2 - 0
fuck12306/api.py

@@ -3,5 +3,7 @@
 # 验证码图片
 pic_url = "https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand&0.21191171556711197"
 
+pic_url2="https://kyfw.12306.cn/passport/captcha/captcha-image64"
+
 # 余票查询接口
 remain = "https://kyfw.12306.cn/otn/leftTicket/queryA?leftTicketDTO.train_date=2018-09-30&leftTicketDTO.from_station=IZQ&leftTicketDTO.to_station=CBQ&purpose_codes=ADULT"

+ 25 - 2
fuck12306/crawl_12306.py

@@ -8,6 +8,7 @@
 
 '''
 import argparse,time,json
+import base64
 from email.mime.text import MIMEText
 from email.header import Header
 import os,sys,re,configparser,logging,requests
@@ -21,6 +22,9 @@ class Crawl12306:
         self.args=self.get_args()
         self.conf=self.get_conf()
 
+    def set_log(self):
+        logging.basicConfig()
+
     def get_conf(self)->dict:
         ''' read config.ini and return a dict'''
         cf = configparser.ConfigParser()
@@ -40,14 +44,33 @@ class Crawl12306:
         ''' get code picture '''
         print("............... get code  pic ...........")
         for i in range(number):
+            print("-----------%s--------------" % (i))
+            # 设置代理
+            proxies = {
+                "http": "http://" + self.conf["proxy"]["proxy"],
+                "https": "https://" + self.conf["proxy"]["proxy"],
+            }
+            self.sess.proxies.update(proxies)
             res= self.sess.get(api.pic_url)
             time.sleep(random.randint(3,5))
             if res.status_code == 200:
-                with open("data/pic/pic_%s%s.png" % (int(time.time(),i),), "wb") as file:
+                with open("data/pic/pic_%s%s.png" % (int(time.time()), i), "wb") as file:
                         file.write(res.content)
 
-    # 监控余票
+    def get_code_pic2(self, number=100):
+        ''' get code picture old api '''
+        print("............... get code  pic ...........")
+        for i in range(number):
+            print("-----------%s--------------" % (i))
+            res= self.sess.get(api.pic_url2)
+            time.sleep(random.randint(1,3))
+            if res.status_code == 200:
+                img_str = json.loads(res.content)['image']
+                with open("data/pic2/pic_%s%s.png" % (int(time.time()), i), "wb") as file:
+                    file.write(base64.b64decode(img_str))
+
     def monitor(self):
+        ''' 监控余票 '''
         print("余票监控中...")
         while True:
             try:

+ 10 - 4
main.py

@@ -7,11 +7,17 @@
 @Desc    :   
 '''
 
-import os,sys,re,argparse,logging
+import os
+import sys
+import re
+import argparse
+import logging
 from fuck12306 import Crawl12306
 
-if __name__=='__main__':
+if __name__ == '__main__':
     print("fuck12306")
-    crawl12306=Crawl12306()
+    crawl12306 = Crawl12306()
     # crawl12306.monitor()
-    crawl12306.get_code_pic(299)
+    # crawl12306.get_code_pic(299)
+    crawl12306.get_code_pic2(10000)
+