聲明:本文主要寫給新手,側重於表現使用爬蟲爬取頁面並提交數據的大體過程,因此沒有對一些東西解釋的很詳細,好比表單,post,get方法,感興趣的能夠私信或評論給我。若是文中有哪些問題,也歡迎你們指正。python
Written by Menglin Ma正則表達式
若是有想學習基礎爬蟲的同窗,建議在中國大學MOOC上搜索嵩天老師的爬蟲課程,講的真的很細緻,也很基礎。服務器
想入門CTF的同窗,給大家推薦個基礎的網站,上面的好多題對新手比較友好:www.shiyanbar.com
。初學者能夠先從基礎密碼學開始,比其餘的部分相對容易。cookie
100米你能跑多快? 預備,跑!
解題連接: http://ctf5.shiyanbar.com/jiaapp
via:www.shiyanbar.compost
將網址打開後是這樣的,一個很複雜的表達式,須要在三秒內提交,依靠人的力量幾乎是不可能的(神仙除外)。最靠譜的方法就是利用程序來計算這個表達式,而後自動提交結果。本文采用的是利用簡易Python爬蟲來實現表達式的自動計算與提交,來獲取含有flag頁面的方法。
學習
使用爬蟲爬取頁面的第一步就是分析頁面。在這道題目中,須要獲取須要提交表單的參數,以及所需計算表達式的位置。能夠在輸入窗口右鍵選擇審查元素,查看所需信息。
網站
在這裏咱們得到了所須要的信息:須要提交的值爲pass_key的值,提交的方法爲post方法,表達式夾在兩個div標籤之間,且div的name爲my_expr是獨一無二的,提交的動做爲?action=check_pass。(關於HTML頁面提交表單的一些詳情能夠嘗試百度一下或私聊我)url
編寫該爬蟲須要一些前提條件,包括導入re庫使用正則表達式,導入requests庫爬取信息,還有就是須要得到目標網頁的URL和須要發送的數據,這些條件要在程序中體現出來。code
編寫該爬蟲大概須要如下幾步:
1.導入必要的庫 2.利用get方法抓取頁面 3.利用正則表達式篩選表達式對應的字符串 4.處理字符串並利用eval方法自動計算 5.利用計算出的數值構造須要post的字典 6.利用post方法(注意帶上cookies)向服務器發送數據,接收響應並打印
import re import requests #發送post和get請求的url get_url = 'http://ctf5.shiyanbar.com/jia/' post_url = 'http://ctf5.shiyanbar.com/jia/?action=check_pass' #利用get方法獲取網頁數據 r = requests.get(get_url) #構造與匹配正則表達式 str_text = r"<div name='my_expr'>.*</div>" match = re.search(str_text,r.text) #處理匹配後的結果 result = match.group().replace("<div name='my_expr'>","") result = result.replace("</div>","") if 'x' in result: result = str(eval(result.replace('x','*'))) #構造字典 data = {'pass_key':result} #利用post請求發送data和cookie數據,得到回覆 response = requests.post(post_url,data=data,cookies=r.cookies) response.encoding = response.apparent_encoding print(response.text[:1000])
Vscode下運行該程序,獲得了KEY的值