爬蟲前期知識的儲備(二)

通用爬蟲與聚焦爬蟲:

通用爬蟲:搜索引擎用的爬蟲系統
1)目標:
把互聯網的網頁下載下來,放到本地服務器形成備份,
再對這些網頁做相關處理(提取關鍵字,去掉廣告),最後提供一個用戶檢索接口。
2)抓取流程:
首先選取一部分已有的URL,把這些URL放到待爬取隊列。
從隊列裏取出這些URL,然後解析DNS得到主機IP,然後去這個IP地址對應的服務器下載HTML頁面,
保存到搜索引擎的本地服務器,之後把這個爬過的url放入已爬取隊列。
分析這些網頁內容,找出網頁裏其他的URL連接,繼續執行第二步,直到爬取條件結束。
DNS:就是把域名解析成IP的技術。
3)搜索引擎如何獲取一個新網站的URL:
主動向搜索引擎主動提交網址;
在其它網站裏設置網站的外鏈(友情鏈接);
搜索引擎會和DNS服務商進行合作,可以快速收錄新的網站。
4)通用爬蟲並不是萬物皆可爬,需要遵守一些規則:
Robots協議:協議會指明通用爬蟲可以爬取網頁的權限。
Robots.txt(詳情規則),一般只有大型的搜索引擎爬蟲會遵守。
個人寫的爬蟲就不管了。
5)通用爬蟲工作流程:
爬取網頁-->存儲數據-->存儲數據-->內容處理-->提供檢索/排名服務
6)搜索引擎排名:
PageRank值:根據網站的流量(點擊量/瀏覽量/人氣)統計,排名越高越值錢。
競價排名:誰給錢多,誰排名高。
7)通用爬蟲的缺點:
只能提供和文本相關的內容(HTML、Word、PDF)等,
不能提供多媒體文件(音樂、圖片、視頻)等,二進制文件(程序、腳本)等。
提供的結果千篇一律,不能針對不同領域不同專業的人提供不同的搜索結果。
不能理解人類語義上的檢索。

聚焦爬蟲:爬蟲程序員寫的是針對某種內容的爬蟲
爲了解決通用爬蟲存在的問題,聚焦爬蟲出現了。
面向主題爬蟲,面向需求爬蟲,會針對某種特定的內容去爬取信息,
而且會保證內容和信息儘可能地相關。
聚焦爬蟲的工作原理:
url-list-->響應內容-->提取url(-->響應內容,直到獲取完成,進入下一步)-->提取數據-->入庫

HTTP和HTTPS

HTTP協議:是一種發佈和接收HTML頁面的方法,即超文本傳輸協議。
HTTPS協議:HTTP的安全版,在HTTP下加入SSL層,SSL層在傳輸層對網絡連接進行加密。

HTTP通信由兩部分組成:客戶端請求消息與服務器響應消息

客戶端HTTP請求包括以下的格式:
請求行、請求頭部、空行、請求數據
HTTP請求主要分爲Get和Post兩種方法。
GET是從服務器上獲取數據,POST是向服務器傳送數據。
如果要提交表單,選擇Post方式,使用Get方式會把用戶密碼暴露在地址欄上。

Cookie:通過在客戶端記錄的信息確定用戶的身份。
Session:通過在服務器端記錄的信息確定用戶的身份。

Fiddler是一個不錯的抓包工具,當然直接瀏覽訪問也可以。

那麼接下來我們就寫一個簡單的爬蟲百度代碼:

from urllib import request
import random

#統一資源定位符
url="http://www.baidu.com"

#可以是User-Agent列表,也可以是代理列表
ua_list=[
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6814.400 QQBrowser/10.3.3005.400",
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1",
"Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Mobile Safari/537.36"
]


#在User-Agent列表中隨機選擇一個,更具有安全性
user_agent=random.choice(ua_list)


#User-Agent是爬蟲和反爬蟲鬥爭的第一步,養成這個好習慣
headers={
"User-Agent":user_agent
}


#向指定的url地址發送請求,並返回服務器響應的類文件對象
#在Python2中,是urllib2,在Python3被改成urllib.request.
response=request.urlopen(url)

#服務器返回的類文件對象支持Python文件對象的操作方法
#read()方法就是讀取文件裏的全部內容,返回字符串
html=response.read()

#打印響應內容
print(html)

#打印響應碼
print(response.getcode())

#返回實際數據的實際url,防止重定向的問題
print(response.geturl())

#返回服務器響應的HTTP報頭
print(response.info())
 
輸出結果:
(百度源碼略)

200


http://www.baidu.com


Date: Mon, 07 Jan 2019 06:47:42 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: Close
Vary: Accept-Encoding
Set-Cookie: BAIDUID=B1228A8040377591F7EB96B1090C4AE2:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BIDUPSID=B1228A8040377591F7EB96B1090C4AE2; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1546843662; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: delPer=0; path=/; domain=.baidu.com
Set-Cookie: BDSVRTM=0; path=/
Set-Cookie: BD_HOME=0; path=/
Set-Cookie: H_PS_PSSID=1461_21101_28205_28132_26350_28266_27245_22158; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Cxy_all: baidu+395db271fbbb06e1373116f63b95c029
Cache-Control: private
Expires: Mon, 07 Jan 2019 06:47:25 GMT
Server: BWS/1.1
X-UA-Compatible: IE=Edge,chrome=1
BDPAGETYPE: 1
BDQID: 0xd80982870003d452

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章