爬蟲游戲第三關(guān)

接上一章,我們來到第三關(guān),地址:http://www.heibanke.com/lesson/crawler_ex02/,提示需要登錄,那就先注冊個賬號登錄,登錄后頁面如圖:

image.png

看起來和第二關(guān)差不多,不過多了一句話:“比上一關(guān)多了兩層保護(hù)”,看來就是在第二關(guān)的基礎(chǔ)上加了兩層限制,不管那么多,直接把第二關(guān)的爬蟲代碼修改下url(http://www.heibanke.com/lesson/crawler_ex02/)運行試試看,提示403錯誤

urllib.error.HTTPError: HTTP Error 403: FORBIDDEN

看來是一個登錄cookie驗證,F(xiàn)12打開調(diào)試工具,查看Network,顯示如下圖:


image.png

既然猜測是登錄驗證,那就加上Cookie試試,

header = {
        'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                    r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',
        'Connection': 'keep-alive',
        'Cookie':r'Hm_lvt_74e694103cf02b31b28db0a346da0b6b=1514366315; csrftoken=VDdjKqyv39hMDXMaUW5SMkDAGRF1y85m; sessionid=0fd2tziqn8jhuzuxl5lramgd0swfb2wm; Hm_lpvt_74e694103cf02b31b28db0a346da0b6b=1514427240',
        'Refer':'http://www.heibanke.com/lesson/crawler_ex02/'
    }
    req  = request.Request(url, data)

依然403,仔細(xì)對比下參數(shù),發(fā)現(xiàn)csrfmiddlewaretoken參數(shù)的值變了,于是復(fù)制下網(wǎng)頁上的token到代碼里,再次運行,成功,結(jié)果如圖:


部分結(jié)果截圖

去網(wǎng)頁上試試,昵稱隨便輸一個,密碼輸入上面獲取的結(jié)果:13,搞定


image.png

所有代碼:
from urllib import request
from urllib import parse
from bs4 import BeautifulSoup

def get_page(url, params):
    print('get url %s' % url)
    data = parse.urlencode(params).encode('utf-8')
    header = {
        'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                    r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',
        'Connection': 'keep-alive',
        'Cookie':r'Hm_lvt_74e694103cf02b31b28db0a346da0b6b=1514366315; csrftoken=1yFgXVZtw2rACmTYDGABYKs9VWLWqbeH; sessionid=m4paft1uuvhm3thrwvdgwut2rvu8uz8d; Hm_lpvt_74e694103cf02b31b28db0a346da0b6b=1514428404',
        'Refer':'http://www.heibanke.com/lesson/crawler_ex02/'
    }
    req  = request.Request(url, data, headers=header)
    page = request.urlopen(req).read()
    page = page.decode('utf-8')
    return page
count = 0
url = "http://www.heibanke.com/lesson/crawler_ex02/"
token = '1yFgXVZtw2rACmTYDGABYKs9VWLWqbeH'
username = 'pkxutao'
password = -1
# 構(gòu)造post參數(shù)
data = {
    'csrfmiddlewaretoken': token,
    'username': 'pkxutao',
    'password': password
}
result = '您輸入的密碼錯誤, 請重新輸入'
while result == '您輸入的密碼錯誤, 請重新輸入':
    count += 1
    password += 1
    data['password'] = password
    print('第%d次嘗試,參數(shù):%d' % (count, password))
    result = get_page(url, data)
    soup = BeautifulSoup(result, "html.parser")
    # 解析h3元素
    h3 = soup.find_all("h3")[0]
    result = soup.find_all("h3")[0].text
print('成功,username:%s, password:%d' % (username, password))

總結(jié)

這一關(guān)相對于上一關(guān)多了兩層保護(hù),作者說的很明顯,加上這一關(guān)必須登錄,所以很容易猜測出其中一層保護(hù)是Cookie驗證。我在添加Cookie后測試了好幾次還是403,就一直在找第二層保護(hù)是什么。通過fiddler抓包對比網(wǎng)頁請求和爬蟲請求的參數(shù),發(fā)現(xiàn)除了網(wǎng)頁請求的header里面多了一些參數(shù)外,就是body參數(shù)csrfmiddlewaretoken不一樣了,把csrfmiddlewaretoken的值搞成一樣的測試,就過關(guān)了,還是要心細(xì)和多測試。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • http://www.91ri.org/tag/fuzz-bug 通常情況下,有三種方法被廣泛用來防御CSRF攻擊...
    jdyzm閱讀 4,390評論 0 5
  • 我決定從頭說起。懂的人可以快速略過前面理論看最后幾張圖。 web基礎(chǔ)知識 從OSI參考模型(從低到高:物理層,數(shù)據(jù)...
    顧慎為閱讀 13,807評論 29 90
  • 夏天 夏天是一個大蒸籠,是個音樂會,是道風(fēng)景線,也是個果香四溢的季節(jié)。 夏天是一個悶熱的...
    Cycm閱讀 328評論 0 0
  • 昨天因為看到微博上的一篇關(guān)于要不要aa的文章,跟我媽聊到談戀愛的問題。我說要享受現(xiàn)在,好聚好散。然后我媽就立馬反駁...
    格瑞_shauny閱讀 218評論 0 0

友情鏈接更多精彩內(nèi)容