網(wǎng)站多久會(huì)被百度收錄整合營(yíng)銷的特點(diǎn)有哪些
文章目錄
- 一、什么是爬蟲?
- 二、爬蟲的分類
- 三、網(wǎng)址的構(gòu)成
- 四、爬蟲的基本步驟
- 五、動(dòng)態(tài)頁(yè)面和靜態(tài)頁(yè)面
- 六、偽裝請(qǐng)求頭
- 七、requests庫(kù)介紹
- 1. 概念:
- 2. 安裝方式(使用鏡像源):
- 3. 基本使用:
- 4. response對(duì)象對(duì)應(yīng)的方法:
一、什么是爬蟲?
通俗講:爬蟲就是解放人的雙手,去互聯(lián)網(wǎng)獲取數(shù)據(jù),保存數(shù)據(jù)到本地或者數(shù)據(jù)庫(kù),保存格式如常見的txt、excel、csv、pdf、zip、jpg、mp3、mp4等等。
本質(zhì):爬蟲本質(zhì)是模擬瀏覽器,向服務(wù)器發(fā)送網(wǎng)絡(luò)請(qǐng)求,接受服務(wù)器放回的數(shù)據(jù),保存數(shù)據(jù)。
二、爬蟲的分類
- 通用爬蟲:比如百度、Google、搜狗等搜索引擎。
- 聚焦爬蟲:根據(jù)指定的目標(biāo)網(wǎng)址,獲取精準(zhǔn)的價(jià)值數(shù)據(jù),并保存數(shù)據(jù)。
三、網(wǎng)址的構(gòu)成
爬蟲既然是模擬瀏覽器對(duì)網(wǎng)址發(fā)起請(qǐng)求,那先給大家介紹一下網(wǎng)址的構(gòu)成。
以該網(wǎng)址為例:https://www.baidu.com/s?ie=UTF-8&wd=python
- 協(xié)議部分:https為協(xié)議部分,全稱為超文本傳輸安全協(xié)議,與之對(duì)應(yīng)的還有http協(xié)議。兩者區(qū)別是http是明文傳輸、https是密文傳輸,后者安全性更高。
- 域名部分:域名又稱為主機(jī)名,通過(guò)域名就可以找到對(duì)應(yīng)的這臺(tái)服務(wù)器或者主機(jī)。域名本質(zhì)是IP地址,比如訪問(wèn)www.baidu.com,其實(shí)訪問(wèn)的是某個(gè)IP地址。只是IP地址是一串?dāng)?shù)字,不便記憶,所以通過(guò)特殊的方式將IP地址轉(zhuǎn)換為域名。
- 路徑部分:我們?cè)L問(wèn)某個(gè)服務(wù)器的信息,比如百度的服務(wù)器,其實(shí)就是拿到服務(wù)器上面某個(gè)文件夾里面的數(shù)據(jù)。類似于我們電腦一樣,服務(wù)器上面也有眾多文件夾,每個(gè)文件夾里面還有下級(jí)目錄,一層嵌套一層,這就稱為路徑部分。路徑在網(wǎng)址中是以“/”分隔開的,以上述網(wǎng)址為例:路徑就是/s。如果有多級(jí)目錄,就是多個(gè)/分隔。
- 參數(shù)部分:參數(shù)就是我們?cè)L問(wèn)網(wǎng)站的時(shí)候傳遞的關(guān)鍵字,比如我們要訪問(wèn)百度服務(wù)器中圖片里面的風(fēng)景圖片,那請(qǐng)求的時(shí)候就要帶上參數(shù)。參數(shù)和路徑之間用“?”隔開,如果傳遞多個(gè)參數(shù),每個(gè)參數(shù)之間用“&”地址符連接。如上網(wǎng)址中,ie=UTF-8和wd=python就是傳遞的兩個(gè)參數(shù),中間用“&”連接。
四、爬蟲的基本步驟
- 準(zhǔn)備網(wǎng)址:https://www.baidu.com/s?ie=UTF-8&wd=python。
- 請(qǐng)求網(wǎng)址:獲取網(wǎng)站數(shù)據(jù)。
- 解析數(shù)據(jù):解析價(jià)值數(shù)據(jù)。
- 保存數(shù)據(jù):數(shù)據(jù)保存。
五、動(dòng)態(tài)頁(yè)面和靜態(tài)頁(yè)面
做爬蟲項(xiàng)目時(shí),首先要做的就是查看當(dāng)前網(wǎng)站是靜態(tài)頁(yè)面還是動(dòng)態(tài)頁(yè)面,因?yàn)?mark>靜態(tài)頁(yè)面的數(shù)據(jù)是在當(dāng)前頁(yè)面的源碼里面,而動(dòng)態(tài)頁(yè)面數(shù)據(jù)不在當(dāng)前源碼,一般是在另外的JS文件中存放。那如何區(qū)分網(wǎng)頁(yè)是動(dòng)態(tài)還是靜態(tài)頁(yè)面呢?
- 打開瀏覽器。
- 訪問(wèn)網(wǎng)址。
- 網(wǎng)頁(yè)空白處右鍵點(diǎn)擊,查看頁(yè)面源代碼。
- 在網(wǎng)頁(yè)源代碼中搜索網(wǎng)頁(yè)所展示的部分,如果源碼中都有,則為靜態(tài)頁(yè)面,否則是動(dòng)態(tài)頁(yè)面。
六、偽裝請(qǐng)求頭
多數(shù)網(wǎng)站對(duì)于爬蟲技術(shù)是有限制的,并不希望爬蟲去訪問(wèn)他的數(shù)據(jù),一則是爬蟲訪問(wèn)速率太快,容易造成網(wǎng)站負(fù)載超荷;二是爬蟲并不是真實(shí)用戶,對(duì)于網(wǎng)站經(jīng)營(yíng)數(shù)據(jù)的分析和決策會(huì)造成干擾;因而網(wǎng)站會(huì)出臺(tái)各種手段限制爬蟲,而如果要使用爬蟲技術(shù),則就要突破這些限制,也就是反爬。常用反爬措施有:
- 瀏覽器標(biāo)識(shí):我們?cè)L問(wèn)任何網(wǎng)站,一般都是通過(guò)電腦或者手機(jī),使用瀏覽器來(lái)訪問(wèn),這樣對(duì)方服務(wù)器就可以看到我們的設(shè)備型號(hào)以及瀏覽器型號(hào),比如通過(guò)Windows系統(tǒng)的電腦上的谷歌瀏覽器去訪問(wèn)某服務(wù)器,對(duì)方就可以檢測(cè)到我們的設(shè)備操作系統(tǒng)類型及瀏覽器版本類型等參數(shù),確定了是真實(shí)瀏覽器發(fā)送的請(qǐng)求才會(huì)給到數(shù)據(jù)。而爬蟲直接訪問(wèn)的話,對(duì)方會(huì)檢測(cè)到,所以我們要將自己偽裝成瀏覽器發(fā)起請(qǐng)求,也就是將用戶代理(user-agent)的值改為瀏覽器型號(hào)。
- 反爬字段:上面我們說(shuō)過(guò),爬蟲是模擬瀏覽器直接請(qǐng)求網(wǎng)址的,也就是給到他指定的網(wǎng)址,就可以對(duì)該網(wǎng)址發(fā)起請(qǐng)求。比如我們?cè)L問(wèn)淘寶之后搜索某商品,然后點(diǎn)開其中一個(gè)商品,需要抓取這個(gè)商品相關(guān)的信息。那就將該商品頁(yè)面網(wǎng)址復(fù)制下來(lái),然后用爬蟲請(qǐng)求。但是這樣是拿不到數(shù)據(jù)的,很簡(jiǎn)單,因?yàn)檎H巳タ吹竭@個(gè)商品頁(yè)面,肯定是首先打開淘寶,搜索商品之后,繼而點(diǎn)擊該商品才可以看到。而爬蟲直接就訪問(wèn)了該網(wǎng)址,很明顯是反常的。所以網(wǎng)站有專門的反爬字段來(lái)檢測(cè),這個(gè)字段是referer,也就是來(lái)源的意思,訪問(wèn)的網(wǎng)址頁(yè)面是來(lái)源于哪里,比如該商品頁(yè)面是來(lái)源于淘寶,那就一定要攜帶referer字段,值為淘寶網(wǎng)址。如果不攜帶該字段,則拿不到數(shù)據(jù)。
- cookies:cookies就是用戶登錄后,服務(wù)器返回給用戶的標(biāo)識(shí)信息,在一定時(shí)間內(nèi),用戶再次訪問(wèn)該網(wǎng)站,不需要登錄就可以看到登錄后的數(shù)據(jù)。比如我們?cè)L問(wèn)淘寶,要查看購(gòu)物車中商品信息,則需要輸入用戶名和密碼登錄,登錄后則可看到購(gòu)物車數(shù)據(jù)。登錄之后,一段時(shí)間內(nèi)不要再次登錄,也可以隨時(shí)看到購(gòu)物車信息,因?yàn)槲覀冎蟮拿看卧L問(wèn)都是攜帶了第一次登錄后,服務(wù)器返回給我們的cookies身份標(biāo)識(shí),故而不用每次都輸入用戶名密碼登錄。做爬蟲項(xiàng)目時(shí),我們也會(huì)經(jīng)常遇到需要登錄的網(wǎng)站,登錄一次之后拿到cookies值,將該cookies保存下來(lái),之后每次訪問(wèn)時(shí)候攜帶上即可。
注意:任何爬蟲項(xiàng)目都不得對(duì)網(wǎng)站運(yùn)營(yíng)造成影響,否則等同于服務(wù)器攻擊。所以在寫爬蟲項(xiàng)目時(shí),一定要對(duì)爬蟲抓取頻率和抓取數(shù)量加以限制。
七、requests庫(kù)介紹
1. 概念:
requests是非常強(qiáng)大的爬蟲請(qǐng)求庫(kù),可以解決日常90%的爬蟲需求
2. 安裝方式(使用鏡像源):
pip install requests -i https://mirrors.aliyun.com/pypi/simple/
3. 基本使用:
- 導(dǎo)包:import requests
- 使用:response = requests.get(url, 反爬請(qǐng)求頭)
注意:請(qǐng)求拿到的response是一個(gè)對(duì)象,不是網(wǎng)站原始數(shù)據(jù),response對(duì)象有眾多屬性和方法。
代碼示例如下圖所示:
4. response對(duì)象對(duì)應(yīng)的方法:
- 獲取網(wǎng)頁(yè)源代碼,有兩種方法:A、text????B、content.decode()
代碼示例如下圖所示:
- 獲取二進(jìn)制數(shù)據(jù)【音樂(lè)、視頻、圖片】:response.content
代碼示例如下圖所示:
- 獲取響應(yīng)狀態(tài)碼【基本不用】:response.status_code,狀態(tài)碼是200表示請(qǐng)求成功
代碼示例如下圖所示:
- 獲取json數(shù)據(jù)【常用】:response.json(),網(wǎng)站數(shù)據(jù)很多都是json數(shù)據(jù),拿到數(shù)據(jù)需要將json轉(zhuǎn)化為字典
- 獲取請(qǐng)求頭headers:response.request.headers,可以查看我們發(fā)送給網(wǎng)站的請(qǐng)求頭信息
代碼示例如下圖所示:
- 獲取響應(yīng)頭headers:response.headers,可以看到網(wǎng)站返回的響應(yīng)頭信息
代碼示例如下圖所示: