电竞比分网-中国电竞赛事及体育赛事平台

分享

Python使用Fiddler Postman requests爬取各國(guó)國(guó)旗

 雨潤(rùn)心田品風(fēng)雨 2019-03-17

介紹

本篇文章將會(huì)介紹一個(gè)Python爬蟲(chóng),用來(lái)爬取各個(gè)國(guó)家的國(guó)旗,主要的目標(biāo)是為了展示如何在Python的requests模塊中使用POST方法來(lái)爬取網(wǎng)頁(yè)內(nèi)容。

為了知道POST方法所需要傳遞的HTTP請(qǐng)求頭部和請(qǐng)求體,我們可以使用Fiddler來(lái)進(jìn)行抓包,抓取上網(wǎng)過(guò)程中HTTP請(qǐng)求中的POST方法。為了驗(yàn)證Fiddler抓取到的POST請(qǐng)求,可以使用Postman進(jìn)行測(cè)試驗(yàn)證。在Postman中完成測(cè)試后,我們就可以用Python的request.POST()方法來(lái)寫(xiě)我們的爬蟲(chóng)了。

流程

作為上述過(guò)程的一個(gè)演示,我們使用的網(wǎng)址為: http://country.911cha.com/ , 頁(yè)面如下:

Python使用Fiddler+Postman+requests爬取各國(guó)國(guó)旗

在表單中輸入德國(guó),跳轉(zhuǎn)后的頁(yè)面如下:

Python使用Fiddler+Postman+requests爬取各國(guó)國(guó)旗

我們可以發(fā)現(xiàn),在搜索的結(jié)果中,會(huì)出現(xiàn)德國(guó)這個(gè)搜索結(jié)果。點(diǎn)擊該搜索結(jié)果,跳轉(zhuǎn)后的頁(yè)面如下:

Python使用Fiddler+Postman+requests爬取各國(guó)國(guó)旗

在這個(gè)頁(yè)面中有我們需要的德國(guó)的國(guó)旗。但是,怎么知道該網(wǎng)頁(yè)的具體網(wǎng)址呢?換句話說(shuō),就是怎樣得到http://country.911cha.com/GER... ?別擔(dān)心,在剛才出來(lái)的德國(guó)這個(gè)搜索結(jié)果中,我們查看其源代碼,不難發(fā)現(xiàn),在HTML源代碼中,有我們想要的東西:

Python使用Fiddler+Postman+requests爬取各國(guó)國(guó)旗

在源代碼中我們能看到“GER.html”,這就意味著,只要得到搜索的結(jié)果,我們可以分析HTML源碼來(lái)得到這個(gè)搜索結(jié)果的連接網(wǎng)址,然后在該連接網(wǎng)址中獲取該國(guó)的國(guó)旗。所以,在這個(gè)爬蟲(chóng)中,最困難的地方在于,如何獲取搜索結(jié)果?即,得到提交表單后的結(jié)果,也就是POST方法提交后的響應(yīng)結(jié)果。我們利用Fiddler來(lái)抓取該P(yáng)OST方法。

我們打開(kāi)Fiddler, 同時(shí)重復(fù)上面的操作,可以得到該過(guò)程的HTTP請(qǐng)求,如下圖:

Python使用Fiddler+Postman+requests爬取各國(guó)國(guó)旗

Fiddler幫助我們找到了剛才提交表單過(guò)程中的一個(gè)POST請(qǐng)求,具體分析該P(yáng)OST請(qǐng)求,其請(qǐng)求頭部如下:

Python使用Fiddler+Postman+requests爬取各國(guó)國(guó)旗

其請(qǐng)求體如下:

Python使用Fiddler+Postman+requests爬取各國(guó)國(guó)旗

為了驗(yàn)證Fiddler抓取的POST請(qǐng)求,我們需要要Postman來(lái)進(jìn)行測(cè)試。在用Postman進(jìn)行測(cè)試前,我們需要問(wèn):是否所有請(qǐng)求頭部中的數(shù)據(jù)都需要呢?答案是否定的,實(shí)際上,我們只需要User-Agent和Content-Type即可。在Postman中,先輸入請(qǐng)求頭部,如下:

Python使用Fiddler+Postman+requests爬取各國(guó)國(guó)旗

再輸入請(qǐng)求體,如下:

Python使用Fiddler+Postman+requests爬取各國(guó)國(guó)旗

點(diǎn)擊'SEND'按鈕,得到響應(yīng)后的結(jié)果,如下:

Python使用Fiddler+Postman+requests爬取各國(guó)國(guó)旗

OK,這樣我們就完成了Postman的測(cè)試。

爬蟲(chóng)

于是,借助這些信息來(lái)完成request.post()的提交,同時(shí),借助BeautifulSoup來(lái)解析網(wǎng)頁(yè),得到國(guó)家的國(guó)旗下載地址并完成下載。具體的Python代碼如下:

Python使用Fiddler+Postman+requests爬取各國(guó)國(guó)旗

其中countries.txt的部分內(nèi)容如下:

Python使用Fiddler+Postman+requests爬取各國(guó)國(guó)旗

運(yùn)行上述Python代碼,我們發(fā)現(xiàn)在E盤(pán)的flag文件夾下,已經(jīng)下載了各個(gè)國(guó)家的國(guó)旗,如下:

Python使用Fiddler+Postman+requests爬取各國(guó)國(guó)旗

這樣我們就完成了本次爬蟲(chóng)的任務(wù)!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多