Python爬蟲入門(一) (適合初學(xué)者)
關(guān)于爬蟲是什么,怎樣保證爬蟲的合法性小編在這就不再過(guò)多的闡述,從本章起,小編將和大家一起分享在學(xué)習(xí)python爬蟲中的所學(xué),希望可以和大家一起進(jìn)步,也希望各位可以關(guān)注一下我!
首先我們來(lái)初步了解下如何使用開發(fā)者工具進(jìn)行抓包。以 https://fanyi.baidu.com/ 為例。在網(wǎng)頁(yè)界面右鍵點(diǎn)擊檢查,或使用CTRL+SHIFT+I打開。
如圖打開了開發(fā)者工具后我們點(diǎn)擊網(wǎng)絡(luò)得到如上界面。接著按照提示按CTRL+R進(jìn)行刷新。刷新后如下圖所示:
此時(shí)我們即可看到我們獲取到了很多很多的數(shù)據(jù)包,但是想要完成一個(gè)爬蟲程序的第一步就是在這眾多的包中,找到正確的API數(shù)據(jù)接口。通俗點(diǎn)將就是你想要獲得一個(gè)小球,而這個(gè)小球藏在一個(gè)小箱子里,而此時(shí)有很多很多個(gè)小箱子,想要獲得小球則需要找出小球究竟藏在哪個(gè)箱子里。一般在實(shí)際操作中我們只需要使用到上圖小編圈出來(lái)的兩個(gè)地方,一個(gè)是全部、另一個(gè)是Fetch/XHR。在全部中會(huì)顯示所有請(qǐng)求獲取到的包其中包括:網(wǎng)頁(yè)源碼、css、js、圖片、ajax等。而在Fetch/XHR中則只能看到ajax請(qǐng)求所獲得的數(shù)據(jù)包。ajax請(qǐng)求一般是對(duì)動(dòng)態(tài)數(shù)據(jù)進(jìn)行請(qǐng)求,即前端向后端發(fā)起請(qǐng)求,動(dòng)態(tài)請(qǐng)求到后端數(shù)據(jù)庫(kù)中的數(shù)據(jù),并將這些數(shù)據(jù)展示在前端網(wǎng)頁(yè)中。(可能會(huì)感覺(jué)聽起來(lái)云里霧里,沒(méi)關(guān)系哦,后面根據(jù)一個(gè)一個(gè)的例子可以更好的了解,或者小編以后更新django框架時(shí)會(huì)細(xì)講ajax請(qǐng)求)
接下來(lái)我們進(jìn)入爬蟲的第一個(gè)程序(百度翻譯的單詞爬蟲)
在百度翻譯中我們可以輸入一個(gè)單詞,然后網(wǎng)頁(yè)會(huì)動(dòng)態(tài)的在界面上給我們展示這個(gè)單詞的意思,因此我們可以非常非常非常自信的確定,單詞意思的數(shù)據(jù)是通過(guò)動(dòng)態(tài)請(qǐng)求得到的,既然說(shuō)動(dòng)態(tài)請(qǐng)求得到的,那么又可以確定這八成就是一個(gè)ajax請(qǐng)求。因此我們選中Fetch/XHR。
根據(jù)觀察此時(shí)看到Fetch/XHR中只有這三個(gè)數(shù)據(jù)包,但點(diǎn)開查看其響應(yīng)(即返回值)時(shí)確發(fā)現(xiàn)好像沒(méi)有我們需要的數(shù)據(jù)。這個(gè)什么呢,不必慌張,因?yàn)槲覀儾⑦€沒(méi)有在左邊輸入單詞的框中輸入過(guò)單詞,于是我們可以在左邊隨意的輸入一個(gè)英文單詞進(jìn)行測(cè)試:
當(dāng)我們輸入完一個(gè)單詞后發(fā)現(xiàn),右邊又抓到了很包,對(duì)這些抓到的包進(jìn)行分析可以找到如下這個(gè)數(shù)據(jù)包:
由上述三種圖可以看出,這個(gè)包中就藏著我們想要的數(shù)據(jù)。通過(guò)查看該包的標(biāo)頭可以確定,請(qǐng)求數(shù)據(jù)的請(qǐng)求URL是:https://fanyi.baidu.com/sug,且發(fā)起的請(qǐng)求方式為POST,且根據(jù)Content-Type: application/json可以得出請(qǐng)求的返回值為json格式,在payload中可以分析出該P(yáng)OST請(qǐng)求需要攜帶一個(gè)名為kw的參數(shù),參數(shù)的值為我們需要查詢的單詞。這時(shí)我們即可以弄清楚該網(wǎng)站查詢單詞的運(yùn)行機(jī)制了:我們?cè)诓樵兛蛑休斎胗⑽膯卧~,網(wǎng)頁(yè)前端拿到我們輸入的單詞,通過(guò)ajax請(qǐng)求向https://fanyi.baidu.com/sug發(fā)起請(qǐng)求,并將我們輸入的英文單詞作為表單數(shù)據(jù)傳輸給后端,后端根據(jù)我們輸入的單詞在數(shù)據(jù)庫(kù)中查詢?cè)搯卧~,拿到該單詞的意思然后再次返回給前端并展示出來(lái)。接下來(lái)就進(jìn)入令人激動(dòng)的coding代碼部分。
代碼部分
1、安裝requests包(在cmd命令行中輸入以下語(yǔ)句進(jìn)行自動(dòng)下載安裝):
前提需要電腦上已經(jīng)裝有python且配置了環(huán)境變量
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
2、導(dǎo)入requests包并確定url:
import requests
url = 'https://fanyi.baidu.com/sug'
3、進(jìn)行UA偽裝
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 Edg/98.0.1108.56'
}
UA偽裝:可以理解為將我們的爬蟲程序偽裝起來(lái),增加請(qǐng)求成功的可能性。
只需在數(shù)據(jù)包的標(biāo)頭中,拉到最下面,即可以找到這個(gè)User-Agent,將其復(fù)制下來(lái),像小編一樣在python用字典進(jìn)行封裝即可。
4、確定參數(shù),并對(duì)數(shù)據(jù)接口發(fā)起請(qǐng)求獲得返回結(jié)果
data = { #post請(qǐng)求攜帶的參數(shù)
'kw':'dog'
}
#對(duì)目標(biāo)url發(fā)起post請(qǐng)求
response = requests.post(url=url,headers=headers,data=data).json()
print(response)
結(jié)果如下:
至此一個(gè)最最最簡(jiǎn)單的爬蟲程序就寫完了,是不是很簡(jiǎn)單!接下來(lái)我們對(duì)程序進(jìn)行完善,所有代碼如下:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-821843.html
import requests
def spider(url,headers,data):
response = requests.post(url=url, headers=headers, data=data).json() # 對(duì)目標(biāo)url發(fā)起post請(qǐng)求
for key in response['data'][0]:
print(key,response['data'][0][key])
def main():
url = 'https://fanyi.baidu.com/sug' #需要請(qǐng)求的url
headers = { #進(jìn)行UA偽裝
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 Edg/98.0.1108.56'
}
while True: #使程序進(jìn)入死循環(huán)
kw = input("輸入需要查詢的單詞:")
data = { #post請(qǐng)求攜帶的參數(shù)
'kw':kw
}
spider(url=url,headers=headers,data=data) #調(diào)用自定義函數(shù)spider
if __name__ == '__main__':
main()
這樣一個(gè)簡(jiǎn)單的基于爬蟲的單詞查詢器就完成啦!其中對(duì)json數(shù)據(jù)進(jìn)行提取的代碼如果有看不懂的小伙伴可以去學(xué)習(xí)一個(gè)python的字典。
希望該文章可以幫助到你!如果覺(jué)得有用可以關(guān)注一下我哦!后序會(huì)寫更多的例子。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-821843.html
到了這里,關(guān)于Python爬蟲入門(一)(適合初學(xué)者)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!