日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

python怎么爬取Linux作业,Python爬虫之使用Fiddler+Postman+Python的requests模块爬取各国国旗...

發(fā)布時(shí)間:2024/1/1 linux 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python怎么爬取Linux作业,Python爬虫之使用Fiddler+Postman+Python的requests模块爬取各国国旗... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

介紹

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

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

流程

作為上述過程的一個(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)址呢?換句話說,就是怎樣得到http://country.911cha.com/GER.html ?別擔(dān)心,在剛才出來的德國(guó)這個(gè)搜索結(jié)果中,我們查看其源代碼,不難發(fā)現(xiàn),在HTML源代碼中,有我們想要的東西:

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

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

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

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

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

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

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

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

爬蟲

于是,借助這些信息來完成request.post()的提交,同時(shí),借助BeautifulSoup來解析網(wǎng)頁(yè),得到國(guó)家的國(guó)旗下載地址并完成下載。具體的Python代碼如下:# -*- coding: utf-8 -*-import urllib.requestimport requestsfrom bs4 import BeautifulSoup# 函數(shù):下載指定國(guó)家的國(guó)旗# 參數(shù): country: 國(guó)家def download_flag(country): # 請(qǐng)求頭部 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', } # POST數(shù)據(jù) data = {'q': country} # 網(wǎng)址 url = 'http://country.911cha.com/' # 提交POST請(qǐng)求 r = requests.post(url=url, data=data, headers=headers) # 利用BeautifulSoup解析網(wǎng)頁(yè) content = BeautifulSoup(r.text, 'lxml') # 得到搜索結(jié)果(國(guó)家)所在網(wǎng)頁(yè)地址 country = content.find_all('div', class_='mcon')[1]('ul')[0]('li')[0]('a')[0] link = country['href'] #利用GET方法得到搜索國(guó)家的網(wǎng)頁(yè) r2 = requests.get(url='%s/%s'%(url, link)) # 利用BeautifulSoup解析網(wǎng)頁(yè) content = BeautifulSoup(r2.text, 'lxml') # 獲取網(wǎng)頁(yè)中的圖片 images = content.find_all('img') # 獲取指定國(guó)家的國(guó)旗名稱及下載地址 for image in images: if 'alt' in image.attrs: if '國(guó)旗' in image['alt']: name = image['alt'].replace('國(guó)旗', '') link = image['src'] # 下載國(guó)旗圖片 urllib.request.urlretrieve('%s/%s'%(url, link), 'E://flag/%s.gif'%name)def main(): # countries.txt儲(chǔ)存各個(gè)國(guó)家的名稱 file = 'E://flag/countries.txt' with open(file, 'r') as f: counties = [_.strip() for _ in f.readlines()] # 遍歷各個(gè)國(guó)家,下載國(guó)旗 for country in counties: try: download_flag(country) print('%s國(guó)旗下載成功!'%country) except: print('%s國(guó)旗下載失敗~'%country)main()

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

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

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

總結(jié)

本次爬蟲利用Python的requests模塊的POST方法,來模擬網(wǎng)頁(yè)中的表單提交。為了得到表單提交過程中的HTTP請(qǐng)求,即請(qǐng)求頭部和請(qǐng)求體,我們利用了抓包工具Fiddler,而Postman的作用是為了幫助我們驗(yàn)證Fiddler抓取的POST請(qǐng)求是否正是我們需要的POST請(qǐng)求,同時(shí)也能驗(yàn)證請(qǐng)求頭部及請(qǐng)求體。

雖然整個(gè)爬蟲的過程寫的不免麻煩,但是操作的思路應(yīng)該是清晰的,再說,熟能生巧,多用幾次,也就能熟悉整個(gè)流程了。本次爬蟲只是作為整個(gè)流程的一個(gè)簡(jiǎn)單展示,讀者可以在此基礎(chǔ)上,去實(shí)現(xiàn)更為復(fù)雜的爬蟲,希望本次的分享能夠幫助到讀者。謝謝大家能讀到這兒,也歡迎大家交流~~

注意:本人現(xiàn)已開通兩個(gè)微信公眾號(hào): 因?yàn)镻ython(微信號(hào)為:python_math)以及輕松學(xué)會(huì)Python爬蟲(微信號(hào)為:easy_web_scrape), 歡迎大家關(guān)注哦~~

總結(jié)

以上是生活随笔為你收集整理的python怎么爬取Linux作业,Python爬虫之使用Fiddler+Postman+Python的requests模块爬取各国国旗...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。