您好,登錄后才能下訂單哦!
這篇文章主要講解了“Python網(wǎng)絡(luò)爬蟲(chóng)舉例分析”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Python網(wǎng)絡(luò)爬蟲(chóng)舉例分析”吧!
先來(lái)看一段簡(jiǎn)單的代碼。
import requests #導(dǎo)入requests包 url = 'https://www.cnblogs.com/LexMoon/' strhtml = requests.get(url) #get方式獲取網(wǎng)頁(yè)數(shù)據(jù) print(strhtml.text)
首先是import requests來(lái)導(dǎo)入網(wǎng)絡(luò)請(qǐng)求相關(guān)的包,然后定義一個(gè)字符串url也就是目標(biāo)網(wǎng)頁(yè),之后我們就要用導(dǎo)入的requests包來(lái)請(qǐng)求這個(gè)網(wǎng)頁(yè)的內(nèi)容。
這里用了requests.get(url),這個(gè)get并不是拿取的那個(gè)get,而是一種關(guān)于網(wǎng)絡(luò)請(qǐng)求的方法。
網(wǎng)絡(luò)請(qǐng)求的方法有很多,最常見(jiàn)的有g(shù)et,post,其它如put,delete你幾乎不會(huì)見(jiàn)到。
requests.get(url)就是向url這個(gè)網(wǎng)頁(yè)發(fā)送get請(qǐng)求(request),然后會(huì)返回一個(gè)結(jié)果,也就是這次請(qǐng)求的響應(yīng)信息。
響應(yīng)信息中分為響應(yīng)頭和響應(yīng)內(nèi)容。
響應(yīng)頭就是你這次訪問(wèn)是不是成功了,返回給你的是什么類型的數(shù)據(jù),還有很多一些。
響應(yīng)內(nèi)容中就是你獲得的網(wǎng)頁(yè)源碼了。
好了,這樣你就算是入門Python爬蟲(chóng)了,但是還是有很多問(wèn)題。
1. get和post請(qǐng)求有什么區(qū)別?
2. 為什么有些網(wǎng)頁(yè)我爬取到了,里面卻沒(méi)有我想要的數(shù)據(jù)?
3. 為什么有些網(wǎng)站我爬下來(lái)的內(nèi)容和我真實(shí)看到的網(wǎng)站內(nèi)容不一樣?
get和post請(qǐng)求有什么區(qū)別?
get和post的區(qū)別主要在于參數(shù)的位置,比如說(shuō)有一個(gè)需要登錄用戶的網(wǎng)站,當(dāng)我們點(diǎn)擊登錄之后,賬號(hào)密碼應(yīng)該放在哪里。
get請(qǐng)求最直觀的體現(xiàn)就是請(qǐng)求的參數(shù)就放在了URL中。
比如說(shuō)你百度Python這個(gè)關(guān)鍵字,就可以發(fā)現(xiàn)它的URL如下:
https://www.baidu.com/s?wd=Python&rsv_spt=1
這里面的dw=Python就是參數(shù)之一了,get請(qǐng)求的參數(shù)用?開(kāi)始,用&分隔。
如果我們需要輸入密碼的網(wǎng)站用了get請(qǐng)求,我們的個(gè)人信息不是很容易暴露嗎,所以就需要post請(qǐng)求了。
在post請(qǐng)求中,參數(shù)會(huì)放在請(qǐng)求體內(nèi)。
比如說(shuō)下面是我登錄W3C網(wǎng)站時(shí)的請(qǐng)求,可以看到Request Method是post方式。
在請(qǐng)求的下面還有我們發(fā)送的登錄信息,里面就是加密過(guò)后的賬號(hào)密碼,發(fā)送給對(duì)方服務(wù)器來(lái)檢驗(yàn)的。
為什么有些網(wǎng)頁(yè)我爬取到了,里面卻沒(méi)有我想要的數(shù)據(jù)?
我們的爬蟲(chóng)有時(shí)候可能爬下來(lái)一個(gè)網(wǎng)站,在查看里面數(shù)據(jù)的時(shí)候會(huì)發(fā)現(xiàn),爬下來(lái)的是目標(biāo)網(wǎng)頁(yè),但是里面我們想要的數(shù)據(jù)卻沒(méi)有。
這個(gè)問(wèn)題大多數(shù)發(fā)生在目標(biāo)數(shù)據(jù)是那些列表型的網(wǎng)頁(yè),比如說(shuō)前幾天班上一個(gè)同學(xué)問(wèn)了我一個(gè)問(wèn)題,他在爬攜程的航班信息時(shí),爬下來(lái)的網(wǎng)頁(yè)除了獲得不了航班的信息,其他地方都可以拿到。
如下圖:
這是一個(gè)很常見(jiàn)的問(wèn)題,因?yàn)樗鹯equests.get的時(shí)候,是去get的上面我放的那個(gè)URL地址,但是這個(gè)網(wǎng)頁(yè)雖然是這個(gè)地址,但是他里面的數(shù)據(jù)卻不是這個(gè)地址。
聽(tīng)起來(lái)很像很難,但是從攜程這個(gè)網(wǎng)站的設(shè)計(jì)人的角度來(lái)說(shuō),加載的這部分航班列表信息可能很龐大,如果你是直接放在這個(gè)網(wǎng)頁(yè)里面,我們用戶打開(kāi)這個(gè)網(wǎng)頁(yè)可能需要很久,以至于認(rèn)為網(wǎng)頁(yè)掛了然后關(guān)閉,所以設(shè)計(jì)者在這個(gè)URL請(qǐng)求中只放了主體框架,讓用戶很快進(jìn)入網(wǎng)頁(yè)中,而主要的航班數(shù)據(jù)則是之后再加載,這樣用戶就不會(huì)因?yàn)榈却荛L(zhǎng)時(shí)間而退出了。
說(shuō)到底怎么做是為了用戶體驗(yàn),那么我們應(yīng)該怎么解決這個(gè)問(wèn)題呢?
如果你學(xué)過(guò)前端,你應(yīng)該知道Ajax異步請(qǐng)求,不知道也沒(méi)事,畢竟我們這里不是在說(shuō)前端技術(shù)。
我們只需要知道我們最開(kāi)始請(qǐng)求的https://flights.ctrip.com/itinerary/oneway/cgq-bjs?date=2019-09-14這個(gè)網(wǎng)頁(yè)中有一段js腳本,在這個(gè)網(wǎng)頁(yè)請(qǐng)求到之后會(huì)去執(zhí)行,而這段腳本的目的就是去請(qǐng)求我們要爬的航班信息。
這時(shí)候我們可以打開(kāi)瀏覽器的控制臺(tái),推薦使用谷歌或者火狐瀏覽器,按F進(jìn)入坦克,不,按F12進(jìn)入瀏覽器控制臺(tái),然后點(diǎn)擊NetWork。
在這里我們就可以看到這個(gè)網(wǎng)頁(yè)中發(fā)生的所有網(wǎng)絡(luò)請(qǐng)求和響應(yīng)了。
在這里面我們可以找到請(qǐng)求航班信息的其實(shí)是https://flights.ctrip.com/itinerary/api/12808/products這個(gè)URL。
為什么有些網(wǎng)站我爬下來(lái)的內(nèi)容和我真實(shí)看到的網(wǎng)站內(nèi)容不一樣?
最后一個(gè)問(wèn)題就是為什么有些網(wǎng)站我爬下來(lái)的內(nèi)容和我真實(shí)看到的網(wǎng)站內(nèi)容不一樣?
這個(gè)的主要原因是,你的爬蟲(chóng)沒(méi)有登錄。
就像我們平常瀏覽網(wǎng)頁(yè),有些信息需要登錄才能訪問(wèn),爬蟲(chóng)也是如此。
這就涉及到了一個(gè)很重要的概念,我們的平常觀看網(wǎng)頁(yè)是基于Http請(qǐng)求的,而Http是一種無(wú)狀態(tài)的請(qǐng)求。
什么是無(wú)狀態(tài)? 你可以理解為它不認(rèn)人,也就是說(shuō)你的請(qǐng)求到了對(duì)方服務(wù)器那里,對(duì)方服務(wù)器是不知道你到底是誰(shuí)。
既然如此,我們登錄之后為什么還可以長(zhǎng)時(shí)間繼續(xù)訪問(wèn)這個(gè)網(wǎng)頁(yè)呢?
這是因?yàn)镠ttp雖然是無(wú)狀態(tài)的,但是對(duì)方服務(wù)器卻給我們安排了身份證,也就是cookie。
在我們第一次進(jìn)入這個(gè)網(wǎng)頁(yè)時(shí),如果之前沒(méi)有訪問(wèn)過(guò),服務(wù)器就會(huì)給我們一個(gè)cookie,之后我們?cè)谶@個(gè)網(wǎng)頁(yè)上的任何請(qǐng)求操作,都要把cookie放進(jìn)去。這樣服務(wù)器就可以根據(jù)cookie來(lái)辨識(shí)我們是誰(shuí)了。
比如知乎里面就可以找到相關(guān)的cookie。
對(duì)于這類網(wǎng)站,我們直接從瀏覽器中拿到已有的cookie放進(jìn)代碼中使用,requests.get(url,cookies="aidnwinfawinf"),也可以讓爬蟲(chóng)去模擬登錄這個(gè)網(wǎng)站來(lái)拿到cookie。
感謝各位的閱讀,以上就是“Python網(wǎng)絡(luò)爬蟲(chóng)舉例分析”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Python網(wǎng)絡(luò)爬蟲(chóng)舉例分析這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。