|
介紹 本篇文章將會(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è)面如下: 在表單中輸入德國(guó),跳轉(zhuǎn)后的頁(yè)面如下: 我們可以發(fā)現(xiàn),在搜索的結(jié)果中,會(huì)出現(xiàn)德國(guó)這個(gè)搜索結(jié)果。點(diǎn)擊該搜索結(jié)果,跳轉(zhuǎn)后的頁(yè)面如下: 在這個(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源代碼中,有我們想要的東西: 在源代碼中我們能看到“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)求,如下圖: Fiddler幫助我們找到了剛才提交表單過(guò)程中的一個(gè)POST請(qǐng)求,具體分析該P(yáng)OST請(qǐng)求,其請(qǐng)求頭部如下: 其請(qǐng)求體如下: 為了驗(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)求頭部,如下: 再輸入請(qǐng)求體,如下: 點(diǎn)擊'SEND'按鈕,得到響應(yīng)后的結(jié)果,如下: OK,這樣我們就完成了Postman的測(cè)試。 爬蟲(chóng) 于是,借助這些信息來(lái)完成request.post()的提交,同時(shí),借助BeautifulSoup來(lái)解析網(wǎng)頁(yè),得到國(guó)家的國(guó)旗下載地址并完成下載。具體的Python代碼如下:
其中countries.txt的部分內(nèi)容如下:
運(yùn)行上述Python代碼,我們發(fā)現(xiàn)在E盤(pán)的flag文件夾下,已經(jīng)下載了各個(gè)國(guó)家的國(guó)旗,如下:
這樣我們就完成了本次爬蟲(chóng)的任務(wù)! |
|
|