如何分析網(wǎng)站網(wǎng)頁爬蟲爬取規(guī)則
還記得之前文章里說的要把所有文章整理成pdf的計劃嗎?今天我們準(zhǔn)備邁出第一步了。
既然確定了用爬蟲來自動整理文章,你得先理解爬蟲是什么。爬蟲說白了就是一個腳本程序。說到腳本,我們平時遇到一些費時費力又容易出錯的活兒,都可以把用到的命令寫到腳本里,讓計算機自動來執(zhí)行。測試同學(xué)說的自動化腳本,運維同學(xué)說的環(huán)境配置腳本,都是這個意思。一個腳本包含了很多命令,一個接一個,告訴計算機第一步干什么,之后干什么,最后干什么。
在這里,我們的目標(biāo)很明確,就是寫一個爬蟲腳本,讓計算機一步一步的把「給產(chǎn)品經(jīng)理講技術(shù)」的所有歷史文章,保存成pdf。
歷史文章哪里去找?正好,微信公眾號的關(guān)注界面有一個查看歷史消息的鏈接。
點開歷史消息,這個頁面每次顯示10篇文章,如果用戶滑到底,就會再加載10篇出來,典型的異步加載。我們要找的,就是每篇文章的URL地址。只要找到所有文章的URL,就能下載到每篇文章的內(nèi)容和圖片,然后就可以進一步加工處理成pdf了。
為此,我們長按頁面選擇在瀏覽器中打開,然后把地址欄里的URL復(fù)制出來,發(fā)送到電腦上,用Chrome打開。用Chrome的最大好處,就是它有一個「開發(fā)人員工具」,可以直接查看網(wǎng)頁的源碼。按下command+option+L,打開開發(fā)人員工具,就能看到這個網(wǎng)頁的源碼了。我們要找的東西,就藏在這些亂七八糟的HTML代碼里。
如何從HTML源碼里找到我們想要的文章鏈接呢?
這要從HTML的結(jié)構(gòu)說起。HTML全稱超文本標(biāo)記語言,所謂標(biāo)記,就是說是它通過很多標(biāo)簽來描述一個網(wǎng)頁。你看到很多像以開始,以結(jié)束的標(biāo)志,就是標(biāo)簽。這些標(biāo)簽一般成對出現(xiàn),標(biāo)簽里面還可以套標(biāo)簽,表示一種層級關(guān)系。最外面的html標(biāo)簽是最大的,head、body次之,一層一層下來,最后才是一段文字,一個鏈接。你可以把它類比成一個人,這個人叫html,有head,有body,body上有hand,hand上面有finger。
扯遠了,一些常用的標(biāo)簽:
1、<head>。一個網(wǎng)頁的很多重要信息,都是在這里聲明的。比如說標(biāo)題,就是在<head>下的<title>里定義的。一個網(wǎng)頁用到的CSS樣式,可以在<head>下的<style>里定義。還有你寫的JavaScript代碼,也可以在<head>下的<script>里定義。
2、<body>。它包含的東西就多了,基本上我們能看到的東西,一段文字,一張圖片,一個鏈接,都在這里面。比如說:
<p>表示一個段落
<h1>是一段文字的大標(biāo)題
<a>表示一個鏈接
<img>表示一張圖
<form>是一個表單
<div>是一個區(qū)塊
計算機是如何理解HTML的標(biāo)簽的呢?其實很簡單,它就是一棵樹。你可以把<html>當(dāng)做樹根,從樹根上分出<head>和<body>,各個分支上又有新的分支,直到不能再分為止。這有點類似我們電腦上存放的文件。假設(shè)你有一本《21天學(xué)習(xí)C++》的電子書,存在D盤、study文件夾下的CS文件夾里。而study文件夾里除了CS文件夾,還有GRE、島國文化等目錄,代表著另一個分支體系。這也是一棵樹。樹上的每一片葉子,都有一條從根部可以到達的路徑,可以方便計算機去查找。
回到正題,有了這些基礎(chǔ)知識,我么再來看微信這個歷史消息頁面。從最外層的<html>標(biāo)簽開始,一層一層展開,中間有<body>、有<div>、最后找到一個<a>標(biāo)簽,標(biāo)簽里面的hrefs就是每篇文章的URL了。把這個URL復(fù)制下來,在新的TAB打開,確認確實是文章的地址。
現(xiàn)在我們通過分析一個網(wǎng)頁的結(jié)構(gòu)、標(biāo)簽,找到了我們想要的文章URL,我們就可以寫爬蟲去模擬這個過程了。爬蟲拿到網(wǎng)頁之后,我們可以用正則表達式去查找這個<a>標(biāo)簽,當(dāng)然,也可以用一些更高級的手段來找。
但是,這個頁面里面畢竟只有10篇文章,我們還要研究它的延遲加載機制,想辦法讓爬蟲能自動找到剩下的文章,這里面會涉及到網(wǎng)絡(luò)抓包相關(guān)的知識,我們后面再聊。
本文來源于互聯(lián)網(wǎng),如有疑問請及時聯(lián)系2898站長資源平臺官方客服,謝謝!