爬蟲相關
爬蟲的概念
爬蟲的工做原理
HTTP
網絡爬蟲爬取過程能夠理解爲,模擬瀏覽器操做的過程。
瀏覽器的主要功能是向服務器發送請求,在瀏覽器窗口中展現你選擇的網絡資源,HTTP是一套計算機經過網絡進行通訊的規則。
HTTP通訊由兩部分組成:客服端請求消息與服務端響應消息
1.當用戶在瀏覽器的地址欄中輸入一個URL並按回車鍵以後,瀏覽器會向HTTP服務器發送HTTP請求。HTTP請求主要分爲兩種"GET"和"POST"。
2.當咱們在瀏覽器輸入URL https://www.baidu.com的時候,瀏覽器發送一個Request請求去獲取https://www.baidu.com的html文件,服務器把Response文件發送給瀏覽器。
3.瀏覽器分析Response中的HTML,發現其中引用了不少其餘文件,好比Image文件,CSS文件,JS文件,瀏覽器會自動再次發送Request去獲取圖片,CSS文件,或者JS文件。
4.當全部文件都下載成功後,網頁會根據HTML語法解構,完整的顯示出來了。URL:統一資源定位符,是用與完整地internet上網頁和其餘資源的地址的一種標識方法。
基本合適以下;
1.scheme:協議(如:http,https,ftp)
2.bost:服務器的IP地址或域名
3.port:霧浮起的端口(若是是走協議默認端口,缺省端口80)
4.path:訪問資源的路徑
5.query-string:參數,發送給http服務器的數據
6.anchor;錨(跳轉到網頁的指定錨點位置)
爬蟲知識站
1.Python的基本語法知識(已經搞定)
2.如何爬取HTML頁面:
HTTP請求的處理,urllib,urllib2,requests
處理後的請求能夠模擬瀏覽器發送請求,獲取服務器響應的文件
3.解析服務器響應的內容
re,xpath,BeautifulSoup4(bs4),jsonpath,pyquery等
使用某種描述性同樣的來給咱們須要提取的數據定義一個匹配規則,
符合這個規則的數據就會被匹配。
4.如何採集動態HTML,驗證碼的處理
經過動態頁面採集:Selenium + PhantomJS(無界面):模擬真實瀏覽器加載js,ajax等非靜態頁面數據。
Tesseract:機器學習庫,機器圖像識別系統,能夠處理 簡單的驗證碼,複雜的驗證碼能夠經過手動輸入/專門的打碼平臺去處理。
5.Scrapy框架:(Scrapy,Pyspider)
高定製性高性能(異步網絡框架twisted),因此數據下載速度很是快,提供了數據存儲數據下載還有提取規則等組件,規則就是xpath。
6.分佈式策略:(中小型公司用不到這麼大的,人員成本機器成本是否大與經濟成本)
scrapy-redis,在Scrpay的基礎上添加了一套以以Redis數據庫爲核心的一套組件。
讓Scrapy框架支持分佈式的功能,主要在Redis裏面作請求指紋去重(若是爬整站,須要用分佈式,不一樣的線程爬蟲要爬取不一樣的頁面,作到批量分佈式去重),請求分配,數據臨時存儲。
7.爬蟲————反爬蟲————反反爬蟲之間的鬥爭:
(爬蟲最後最難的不是複雜頁面的獲取,晦澀數據的採集,難的是跟網站後臺人員鬥智鬥勇)
最先反爬用的是User-Agent,(一秒鐘多少點擊),用代理,驗證碼,(不是全部都是12306的),動態數據加載,加密數據(數據加密有馬腳,核心密鑰會存在js腳本里面),不少到代理這一塊就能夠了。
數據價值,是否值得去費勁作反爬蟲。
1.機器成本 + 人力成本 > 數據價值,就不反了,通常作到封IP就結束了。
2.面子戰爭.....
爬蟲和反爬蟲之間的鬥爭,不少時候是爬蟲獲勝!
爲何?只要是真實用戶能夠瀏覽的網頁數據,爬蟲就必定能爬下來。
根據使用場景對爬蟲分類
通用爬蟲
1.通用爬蟲:搜索引擎用的爬蟲系統。
1.1目標:就是儘量的把網上的全部頁面下載下來,放到本地服務器裏面造成備份
再對這些頁面作相關處理(提取關鍵字,去掉廣告),最後提供一個用戶檢索接口。(百度快照就是拿其餘網頁的數據,提取關鍵字,在本身數據庫裏面作備份)
#提供網頁用戶接口,可是通用引擎爬蟲,最大的缺陷就是不能把圖片,視頻拿出來。
2.抓取流程:
a.首先選取一部分已有的URL,把這些URL放到待爬取隊列。
b.從隊列裏取出這些URL,而後解析DNS獲得主機IP,一個域名必定會對應一個ip地址,一個ip地址不必定有域名。而後取這個IP對應的服務器裏下載HTML頁面,保存到搜索引擎的本地服務器裏。
最後把這個爬取過的URL放入已爬取隊列。
c.分析這些網頁內容,找到網頁裏其餘的URL連接,繼續執行第二步,直到爬取條件結束。
順便帶一下:
瀏覽器打開百度百度後臺發生了什麼?要求從協議層的角度來講,不是tcp,ip是http協議角度來講:
http,https,ftp這三個都是創建在TCP,IP協議基礎上的,講到前三個協議默認TCP,IP協議是成功的。
若是在百度上回車敲一個電影,首先他會把電影地址發送到DNS服務商作解析,DNS就是把域名解析成IP的一種技術。
#若是你在cmd命令太直接數據"ping www.baidu.com"他會給出ping地址"182.61.200.7",把這個ping放到瀏覽器上它也能到百度首頁,每臺機器的ping值不一樣,這樣就不通過DNS服務商作解析了。
3.搜索引擎是如何獲取一個新網站的URL(三種方式):
1.主動向搜索引擎提交這個網址。去(zhanzhnag.baidu.com/linksumit/url)提交,後臺審覈以後再去添加。
2.在其餘網站設置網站的外鏈,如(網站上的友情外鏈)
3.搜索引擎會和DNS服務商進行合做,能夠快速收錄新的網站。(由於新網站必定會有人去提交)
4.通用爬蟲並非萬物皆可爬,它也須要遵照必定的規則:
Robots協議:協議會指明通用爬蟲能夠爬取頁面的權限。
Robots.txt只是一個建議,並非全部爬蟲都遵照,通常只有大型的搜索引擎爬蟲纔會遵照,
我的寫的爬蟲就無論它了,防君子不防小人。若是被其餘網站發現,能夠會告侵權。
5.通用爬蟲的工做流程:爬取網頁 存儲數據 內容處理 提供檢索/排名服務
6.搜素引擎排名:
1.PageRank值:根據網站的流量(點擊量/瀏覽量/人其)統計,流量越高排名越靠前,網站也越值錢。
2.競價排名:誰給錢多,誰排名就越高。(可能查詢,也可能不查詢)
7.通用爬蟲的缺點:
1.只能提供文本相關的內容(HTML,WORD,PDF)等等,可是不能提供更多媒體文件(音樂,圖片,視頻)和二進制文件(程序啊,腳本啊)
2.提供的結果千篇一概,不能針對不一樣領域的人提供不一樣的搜索結果。
3.不能理解人類語義上的檢索。
這樣就誕生了聚焦爬蟲
聚焦爬蟲
聚焦爬蟲:爬蟲程序員寫的針對某種內容的爬蟲。
面向主題爬蟲,面向需求爬蟲:會針對某種特定的內容去爬取信息,並且會保證信息和需求進可能相關。