簡單的python爬取四六級成績


  python語言剛剛開始學,又遇到了一個同學忘記自己的准考證號,99宿舍找回准考證號失敗了,所以就想知道准考證號的大致范圍,一個一個的去查總有結果,這只是最初的想法,於是就勇敢的去做了。

用wireshark抓包分析 得到的信息為 post方法 

然后用python模擬post 由於這次是失敗的,所以就沒有貼代碼

嘗試過改過表頭 返回的數據總是不正確,於是去網上查,看到爬學信網的代碼,於是測試成功,但是99宿舍的沒有成功,或許是99改了post提交

爬學信網的代碼:

import requests
import re
 
#自定義頭文件
header={'Referer':'http://www.chsi.com.cn/cet/',
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0',
        'Host':'www.chsi.com.cn'}
 
#學信網的url
url="http://www.chsi.com.cn/cet/query"
#讀取每一行的准考證號和姓名
num0=0000000000 #准考證號
for i in range(100):
      num=str(num0+i)
      name='' #名字前兩位
      param={
            'zkzh':num,
            'xm':name
      }
 
      #構造get
      response=requests.get(url,headers=header,params=param)
 
      #為了方便正則表達式找總分,去掉所有換行符
      newtext=response.text.replace('\n','')
      try:
          #正則表達式找到總分
          score=re.findall('<span class="colorRed">.*?(\d+)',newtext)
 
          #輸出“姓名+總分”字符串
          ans=name+" "+score[0]
          
          #打印該字符串
          print(ans)
      except:
 
          #打印未能成功爬取的人
          print("no:",num,response.status_code)

總結這次失敗的原因:對python語言不夠熟悉,對post提交不夠了解。

 -----------------------------------------------------2017 2 26 下午--------------------------------------------

又嘗試了一次,這次用的fiddler 4 來模擬http請求,幾次模擬post提交都成功了,但是用python模擬就失敗,當用fiddler抓python的post提交時,才發現中文沒有進行編碼,改掉之后,就成功了,

模擬post提交代碼如下:

#!coding:utf-8
import requests
header= {
        'Host': 'cet.99sushe.com',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
        'Accept-Encoding': 'gzip, deflate',
        'Referer': 'http://cet.99sushe.com/',
        'Cookie': 'CNZZDATA30023677=cnzz_eid%3D1356778947-1488029294-null%26ntime%3D1488083343; id=准考證號; score=',
        'Connection': 'keep-alive',
        'Upgrade-Insecure-Requests':'1',
        'Content-Type': 'application/x-www-form-urlencoded',
        'Content-Length': '36'
        }
param={'id':'准考證號','name':'名字'.encode('gbk')}
url="http://cet.99sushe.com/getscore+准考證號"
print(url,param)
response=requests.post(url,headers=header,data=param)
print(response.text)

總結:漢字記得編碼,如果查詢的數量多的話,學信網會有驗證碼,99宿舍網會封ip,這點需要注意,

 參考資料:https://etenal.me/archives/752


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM