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,這點需要注意,
