摘要:但這邊特別提醒的是里看到的代碼不等于請(qǐng)求網(wǎng)址拿到的返回值。這個(gè)文件包含了列表中所有請(qǐng)求的各項(xiàng)參數(shù)及返回值信息,以便你查找分析。理解了這幾步,大部分網(wǎng)上的數(shù)據(jù)都可以拿到,說解決一半的問題可不是標(biāo)題黨。
網(wǎng)上爬蟲的教程實(shí)在太多了,知乎上搜一下,估計(jì)能找到不下一百篇。大家樂此不疲地從互聯(lián)網(wǎng)上抓取著一個(gè)又一個(gè)網(wǎng)站。但只要對(duì)方網(wǎng)站一更新,很可能文章里的方法就不再有效了。
每個(gè)網(wǎng)站抓取的代碼各不相同,不過背后的原理是相通的。對(duì)于絕大部分網(wǎng)站來說,抓取的套路就那么一些。今天這篇文章不談任何具體網(wǎng)站的抓取,只來說一個(gè)共性的東西:
如何通過 Chrome 開發(fā)者工具 尋找一個(gè)網(wǎng)站上特定數(shù)據(jù)的抓取方式。
(我這里演示的是 Mac 上的英文版 Chrome,Windows 中文版的使用方法是一樣的。)
> 查看網(wǎng)頁(yè)源代碼在網(wǎng)頁(yè)上右擊鼠標(biāo),選擇“ 查看網(wǎng)頁(yè)源代碼 ”( View Page Source ),就會(huì)在新標(biāo)簽頁(yè)中顯示這個(gè) URL 對(duì)應(yīng)的 HTML 代碼文本。
此功能并不算是“開發(fā)者工具”一部分,但也很常用。這個(gè)內(nèi)容和你直接通過代碼向此 URL 發(fā)送 GET 請(qǐng)求得到的結(jié)果是一樣的(不考慮權(quán)限問題)。如果在這個(gè)源代碼頁(yè)面上可以搜索到你要內(nèi)容,則可以按照其規(guī)則,通過 正則、bs4、xpath 等方式對(duì)文本中的數(shù)據(jù)進(jìn)行提取。
不過,對(duì)于很多異步加載數(shù)據(jù)的網(wǎng)站,從這個(gè)頁(yè)面上并不能搜到你要的東西?;蛘咭?yàn)闄?quán)限、驗(yàn)證等限制,代碼中獲取到的結(jié)果和頁(yè)面顯示不一致。這些情況我們就需要更強(qiáng)大的開發(fā)者工具來幫忙了。
> Elements在網(wǎng)頁(yè)上右擊鼠標(biāo),選擇“ 審查元素 ”( Inspect ),可進(jìn)入 Chrome 開發(fā)者工具的 元素選擇器 。在工具中是 Elements 標(biāo)簽頁(yè)。
Elements 有幾個(gè)功能:
選擇元素 :通過鼠標(biāo)去選擇頁(yè)面上某個(gè)元素,并定位其在代碼中的位置。
模擬器 :模擬不同設(shè)備的顯示效果,且可以模擬帶寬。
代碼區(qū) :顯示頁(yè)面代碼,以及選中元素對(duì)應(yīng)的路徑
樣式區(qū) :顯示選中元素所受的 CSS 樣式影響
從 Elements 工具里定位數(shù)據(jù)比我們前面直接在源代碼中搜索要方便,因?yàn)槟憧梢郧宄吹剿幍脑亟Y(jié)構(gòu)。但這邊特別提醒的是:
Elements 里看到的代碼不等于請(qǐng)求網(wǎng)址拿到的返回值 。
它是網(wǎng)頁(yè)經(jīng)過瀏覽器渲染后最終呈現(xiàn)出的效果,包含了異步請(qǐng)求數(shù)據(jù),以及瀏覽器自身對(duì)于代碼的優(yōu)化改動(dòng)。所以,你并不能完全按照 Elements 里顯示的結(jié)構(gòu)來獲取元素,那樣的話很可能得不到正確的結(jié)果。
> Network在開發(fā)者工具里選擇 Network 標(biāo)簽頁(yè)就進(jìn)入了網(wǎng)絡(luò)監(jiān)控功能,也就是常說的“ 抓包 ”。
這是爬蟲所用到的最重要功能。它主要解決兩個(gè)問題:
抓什么
怎么抓
抓什么 ,是指對(duì)于那些通過異步請(qǐng)求獲取到的數(shù)據(jù),如何找到其來源。
打開 Network 頁(yè)面,開啟記錄,然后刷新頁(yè)面,就可以看到發(fā)出的所有請(qǐng)求,包括數(shù)據(jù)、JS、CSS、圖片、文檔等等都會(huì)顯示其中。從請(qǐng)求列表中可以尋找你的目標(biāo)。
一個(gè)個(gè)去找會(huì)很痛苦。分享幾個(gè)小技巧:
點(diǎn)擊“ 搜索 ”功能,直接對(duì)內(nèi)容進(jìn)行查找。
選中 Preseve log ,這樣頁(yè)面刷新和跳轉(zhuǎn)之后,列表不會(huì)清空。
Filter 欄 可以按類型和關(guān)鍵字篩選請(qǐng)求。
找到包含數(shù)據(jù)的請(qǐng)求之后,接下來就是用程序獲取數(shù)據(jù)。這時(shí)就是第二個(gè)問題: 怎么抓 。
并不是所有 URL 都能直接通過 GET 獲?。ㄏ喈?dāng)于在瀏覽器里打開地址),通常還要考慮這幾樣?xùn)|西:
請(qǐng)求方法 ,是 GET 還是 POST。
請(qǐng)求附帶的參數(shù)數(shù)據(jù) 。GET 和 POST 傳遞參數(shù)的方法不一樣。
Headers 信息 。常用的包括 user-agent、host、referer、cookie 等。其中 cookie 是用來識(shí)別請(qǐng)求者身份的關(guān)鍵信息,對(duì)于需要登錄的網(wǎng)站,這個(gè)值少不了。而另外幾項(xiàng),也經(jīng)常會(huì)被網(wǎng)站用來識(shí)別請(qǐng)求的合法性。同樣的請(qǐng)求,瀏覽器里可以,程序里不行,多半就是 Headers 信息不正確。你可以從 Chrome 上把這些信息照搬到程序里,以此繞過對(duì)方的限制。
點(diǎn)擊列表中的一個(gè)具體請(qǐng)求,上述信息都可以找到。
找對(duì) 請(qǐng)求 ,設(shè)對(duì) 方法 ,傳對(duì) 參數(shù) 以及 Headers 信息,大部分的網(wǎng)站上的信息都可以搞定了。
Network 還有個(gè)功能:右鍵點(diǎn)擊列表,選擇“ Save as HAR with content ”,保存到文件。這個(gè)文件包含了列表中 所有請(qǐng)求的各項(xiàng)參數(shù)及返回值信息 ,以便你查找分析。(實(shí)際操作中,我發(fā)現(xiàn)經(jīng)常有直接搜索無效的情況,只能保存到文件后搜索)
除了 Elements 和 Network,開發(fā)者工具中還有一些功能,比如:
Sources ,查看資源列表和調(diào)試 JS。
Console ,顯示頁(yè)面的報(bào)錯(cuò)和輸出,并且可以執(zhí)行 JS 代碼。很多網(wǎng)站會(huì)在這里放上招聘的彩蛋(自己多找些知名網(wǎng)站試試)。
但這些功能和爬蟲關(guān)系不大。如果你開發(fā)網(wǎng)站和優(yōu)化網(wǎng)站速度,就需要和其他功能打交道。這里就不多說了。
總結(jié)一下,其實(shí)你就記住這幾點(diǎn):
“ 查看源代碼 ”里能看到的數(shù)據(jù),可以直接通過程序請(qǐng)求當(dāng)前 URL 獲取。
Elements 里的 HTML 代碼 不等于 請(qǐng)求返回值,只能作為輔助。
在 Network 里用內(nèi)容關(guān)鍵字搜索,或保存成 HAR 文件后搜索,找到包含數(shù)據(jù)的實(shí)際請(qǐng)求
查看請(qǐng)求的具體信息,包括 方法、headers、參數(shù) ,復(fù)制到程序里使用。
理解了這幾步,大部分網(wǎng)上的數(shù)據(jù)都可以拿到,說“解決一半的問題”可不是標(biāo)題黨。
當(dāng)然咯,說起來輕松幾點(diǎn),想熟練掌握,還是有很多細(xì)節(jié)要考慮,需要不斷練習(xí)。但帶著這幾點(diǎn)再去看各種爬蟲案例,思路會(huì)更清晰。
如果你想要針對(duì)爬蟲更詳細(xì)的講解和指導(dǎo),我們的“ 爬蟲實(shí)戰(zhàn) ”課程了解一下,也有面向零基礎(chǔ)的入門課程。
課程詳情公眾號(hào)(Crossin的編程教室)里回復(fù) 碼上行動(dòng)
════
其他文章及回答:
如何自學(xué)Python | 新手引導(dǎo) | 精選Python問答 | Python單詞表 | 區(qū)塊鏈 | 人工智能 | 雙11 | 嘻哈 | 爬蟲 | 排序算法 | 我用Python | 高考 | 世界杯 | 競(jìng)猜 | requests
歡迎搜索及關(guān)注: Crossin的編程教室
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/42649.html
摘要:比如分鐘破譯朋友圈測(cè)試小游戲文章里用的方法但有些根本就沒有提供網(wǎng)頁(yè)端,比如今年火得不行的抖音。所以常用的方式就是通過在電腦上裝一些抓包軟件,將手機(jī)上的網(wǎng)絡(luò)請(qǐng)求全部顯示出來。總結(jié)下,重點(diǎn)是的抓取,關(guān)鍵是配置代理證書,難點(diǎn)是對(duì)請(qǐng)求的分析。 爬蟲的案例我們已講得太多。不過幾乎都是 網(wǎng)頁(yè)爬蟲 。即使有些手機(jī)才能訪問的網(wǎng)站,我們也可以通過 Chrome 開發(fā)者工具 的 手機(jī)模擬 功能來訪問,以便...
摘要:文檔寫得很清楚,也有中文版,你只要看了最初的一小部分,就可以在代碼中派上用場(chǎng)了。 關(guān)于爬蟲的案例和方法,我們已講過許多。不過在以往的文章中,大多是關(guān)注在 如何把網(wǎng)頁(yè)上的內(nèi)容抓取下來 。今天我們來分享下,當(dāng)你已經(jīng)把內(nèi)容爬下來之后, 如何提取出其中你需要的具體信息 。 網(wǎng)頁(yè)被抓取下來,通常就是 str 字符串類型的對(duì)象 ,要從里面尋找信息,最直接的想法就是直接通過字符串的 find 方法 ...
摘要:在知乎上,你一定關(guān)注了一些不錯(cuò)的專欄比如的編程教室。有需要的請(qǐng)?jiān)诠娞?hào)里回復(fù)爬蟲實(shí)戰(zhàn)源碼下載獲取知乎專欄下載器源碼,請(qǐng)?jiān)诠娞?hào)的編程教室里回復(fù)關(guān)鍵字知乎除了代碼外,本專欄打包好的也一并奉上,歡迎閱讀與分享。 老是有同學(xué)問,學(xué)了 Python 基礎(chǔ)后不知道可以做點(diǎn)什么來提高。今天就再用個(gè)小例子,給大家講講,通過 Python 和 爬蟲 ,可以完成怎樣的小工具。 在知乎上,你一定關(guān)注了...
摘要:就在最新的指數(shù)中,數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)項(xiàng)目的首選語(yǔ)言,現(xiàn)在排名僅次于語(yǔ)言,排在第二位,將打落到第三位。特別是在深度學(xué)習(xí)機(jī)器學(xué)習(xí)等領(lǐng)域的廣泛使用,讓一躍成為人工智能時(shí)代的網(wǎng)紅語(yǔ)言。 ...
摘要:前言最近接了一個(gè)爬蟲的私活,收益頗豐。項(xiàng)目需求一個(gè)類似百度文庫(kù)的網(wǎng)站,要求給出獲得文章,以形式保存下來。但是這次需要保存到這不難,難在要求格式不變。文章都是以許多標(biāo)簽組合在一起的。知情人請(qǐng)告知,感激不盡。 前言 最近接了一個(gè)爬蟲的私活,收益頗豐。自認(rèn)為對(duì)爬蟲掌握的還算不錯(cuò),爬過很多國(guó)內(nèi)外網(wǎng)站,數(shù)據(jù)超過百萬(wàn),應(yīng)對(duì)過封IP、設(shè)驗(yàn)證碼、假數(shù)據(jù)、強(qiáng)制登錄等反爬蟲手段。于是乎,我毫不猶豫的接下了...
閱讀 3338·2021-11-22 15:22
閱讀 2862·2021-10-12 10:12
閱讀 2156·2021-08-21 14:10
閱讀 3822·2021-08-19 11:13
閱讀 2841·2019-08-30 15:43
閱讀 3223·2019-08-29 16:52
閱讀 438·2019-08-29 16:41
閱讀 1427·2019-08-29 12:53