1.什麼是爬蟲?javascript
網絡爬蟲(又被稱爲網頁蜘蛛,網絡機器人,在FOAF社區中間,更常常的稱爲網頁追逐者),是一種按照必定的規則,自動地抓取萬維網信息的程序或者腳本。另一些不常使用的名字還有螞蟻、自動索引、模擬程序或者蠕蟲。html
2.什麼是聚焦爬蟲java
聚焦網絡爬蟲(Focused Crawler),又稱主題網絡爬蟲(Topical Crawler),是指選擇性地爬行那些與預先定義好的主題相關頁面的網絡爬蟲[8]。 和通用網絡爬蟲相比,聚焦爬蟲只須要爬行與主題相關的頁面,極大地節省了硬件和網絡資源,保存的頁面也因爲數量少而更新快,還能夠很好地知足一些特定人羣對特定領域信息的需求python
3.什麼是http協議?web
超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最爲普遍的一種網絡協議。全部的WWW文件都必須遵照這個標準。設計HTTP最初的目的是爲了提供一種發佈和接收HTML頁面的方法。1960年美國人Ted Nelson構思了一種經過計算機處理文本信息的方法,並稱之爲超文本(hypertext),這成爲了HTTP超文本傳輸協議標準架構的發展根基。Ted Nelson組織協調萬維網協會(World Wide Web Consortium)和互聯網工程工做小組(Internet Engineering Task Force )共同合做研究,最終發佈了一系列的RFC,其中著名的RFC 2616定義了HTTP 1.1。後端
工做原理:數組
URL的結構,關於這方面的blog也能一搜一大把。。。最近也在看方面的基礎,也記錄下。。。瀏覽器
參考:Web之困tomcat
URL(Uniform Resource Locator)統一資源定位符,就是由一串簡單的文本字符組成。一條符合規範的URL對應的是服務器的一個特定的資源(如HTML頁面,一張圖片等)。安全
Scheme: |
// |
Login:password@ |
Address |
:port |
/path/to/resource |
?query_string |
#fragment |
按照完整的URL的結構定義,一共分紅上述8個部分,其中各部分有着必定的特徵,而且有些部分是必須的,有些是可選的。而標準的定義與瀏覽器對這些標準的實現又有着很大的差別。
Scheme部分:協議部分。
協議名稱是由一串不區分大小寫的字母組成,以 : 做爲結束符。協議所表示的是獲取該資源須要使用的協議。如HTTP、HTTPS等。而瀏覽器將支持一些額外的協議,如data:和javascript:等。
//部分:層級URL標識符號
基本上每一個URL中都會包含這個符號,是固定的;能夠理解爲把協議與後面的信息進行分隔開的一個符號。按照書上的說明,一個好處是Web應用無需關注某個協議的具體實現,而只須要關注於’//’符號後面的指向地址便可。
可是也存在這非層級結構的URL:例如,mailto:協議。當使用
mailto:user@example.com?....的時候,該URL將可以傳遞到默認的郵件客戶端程序而無需其餘的解析。
Login:password@部分:身份驗證
其實這一塊信息咱們看到的比較少,這是一個可選部分,通常的協議(http\https之類)都會使用默認的匿名形式進行數據獲取,該部分使用的是@做爲該部分的結束符號。
Address部分:服務器地址
這是一個很關鍵的部分,這關係到你須要從哪一個服務器上去獲取資源。而咱們看到的比較多的是這部分以域名(htc.org)的形式呈現,還有以Ipv4(220.181.111.188)的地址呈現。固然也可以以Ipv6的形式呈現。
按照標準的描述是這部分只能用:數字、「.」、「-」組成。但瀏覽器對這支持的字符會比較多。
Port部分: 服務器端口
這裏是屬於網絡端口,16位, 所以可選爲[0~2^16),這裏的端口並非物理端口,而是邏輯端口;只要是爲了處理多進程時數據進行傳輸的時候,保證各進程中數據不會發生紊亂,可以傳送到相應的進程中所設定的(參考:http://baike.baidu.com/link?url=MDeMzLjNepWAvUUhGaHPFZMnUk8z3oFGIVz_qqPkOr_HEFxGDf6Gf5pdJd7lVc_XOAfgta2D0augSiFRadL0Kq)
不一樣網絡協議都有本身特定的端口號:如http 80
/path/to/resource:文件路徑
前面提到的URL指向的是一個惟一肯定的資源,而這裏指向的是資源的完整路徑(即存儲的位置),通常都是用 / 進行分層描述。
?query_string:查詢字符串
這裏的查詢字符串是用於參數傳遞給服務器端。但標準沒有對這一部分有着特別嚴格的規定。這一部分是以 ? 開始做爲標識,而如今通常的用法都是相似於如下的形式,?name=hello&id=5&… ,而且這種用法也被服務器端語言(如PHP等)所支持,如PHP獲取該查詢值的方法是:
$_GET['id'] $_POST['id']
#fragment: 片斷ID
該部分與上面的?後面的表單信息本質的區別就是這部份內容不會被傳遞到服務器端。通常用於頁面的錨。就是咱們常見的網站右下腳通常有一個回到頂部的按鈕,通常就是使用其實現的。
例如:
<!DOCTYPE HTML> <html> <head> <title> return </title> <script> function file(){ var xx = "hello<br/>world<br/>" ; for( var i = 0; i < 100; i++ ){ xx += "<br/>" ; } xx += "ni<br/>hao<br/>" ; document.getElementById('aa').innerHTML = xx ; } </script> </head> <body onload = "file();"> <p> nihao </p> <br> <br> <a name='hello'> hello hello hello </a> <br/> <p id = 'aa'> </p> <a href="#hello"> 返回HELLO </a> <a href="#" target="_self">返回頂部</a> </body> </html>
Python獲取URL並處理
參考:
http://www.cnblogs.com/qq78292959/archive/2013/04/07/3005763.html
http://my.oschina.net/guol/blog/95699
python裏面獲取這一部分信息使用的是urlparse模塊。
解析成爲6部分,返回元組(scheme, netloc, path, parameters, query, fragment)
Scheme: |
// |
Login:password@ |
Address |
:port |
/path/to/resource |
?query_string |
#fragment |
from urlparse import urlparse url = "https://www.zhangsanlisi.com/questions/1000;hello_world?id=10&name=zhangsan#hello" end_url = urlparse(url) print end_url
能夠與上面對應,其中netloc描述的是包括驗證信息+服務器地址+端口號;而params用的比較少,基本上比較難看到,用於指定特定的參數,參考(http://blog.csdn.net/yueguanghaidao/article/details/16368399)
用;(分號)做爲開始標識。
6.URL的編碼規則?
7.什麼是url參數規則?
htttp是最多見的web協議,而http的通訊大部分是經過一串URL去表示全部定位的頁面
可是對於2實際是符合http url協議的,他影響的是對於後端的解析字段,對於瀏覽器來講他關心的是?號前面的內容,對應?後面的內容,是邏輯層的處理。這裏要對一些異常狀況進行安全性編碼,防止數組越界,非空判斷等。
8.爬蟲都有哪些種類,哪些區別?
1)衆所周知,網絡爬蟲(或稱爲網絡爬蟲、網絡蜘蛛、機器人)是搜索引擎最上游的一個模塊,是負責搜索引擎內容索引的第一關。
不少人爲了提升本身網站的索引量,都是去網上隨便找一些爬蟲工具來使用。可是不少人不知道,這些抓取網站的小爬蟲是有各類各樣的不一樣性格的。
常見的優秀網絡爬蟲有如下幾種類型:
1.批量型網絡爬蟲:限制抓取的屬性,包括抓取範圍、特定目標、限制抓取時間、限制數據量以及限制抓取頁面,總之明顯的特徵就是受限;
2.增量型網絡爬蟲(通用爬蟲):與前者相反,沒有固定的限制,無休無止直到抓完全部數據。這種類型通常應用於搜索引擎的網站或程序;
3.垂直網絡爬蟲(聚焦爬蟲):簡單的能夠理解爲一個無限細化的增量網絡爬蟲,能夠細緻的對諸如行業、內容、發佈時間、頁面大小等不少因素進行篩選。
這些網絡爬蟲的功能不一,使用方法也不一樣。例如谷歌、百度搜索就是典型的增量型爬蟲,提供大而全的內容來知足世界各地的用戶。另外像天貓、京東不少店鋪都須要屏蔽外來的抓取,這時就須要爬蟲根據一些低級域名的連接來抓取他們進行排名。
後來隨着爬蟲使用愈來愈靈活,不少網站都使用多個爬蟲同步進行抓取。例如現下不少視頻網站,都是先經過通常爬蟲或者人工批量抓取內容,而後給用戶一些可選項,讓客戶本身給聚焦爬蟲劃定範圍最後找到匹配度足夠高的內容,整個過程極大的下降了資源和時間的消耗。相反若是這些內容所有用聚焦爬蟲來完成,不只要消耗大量的網絡資源,並且會延長搜索時間時間,影響客戶體驗。
2)什麼是分佈式爬蟲 和單機爬蟲有什麼區別
分佈式爬蟲就是多臺計算機上都安裝爬蟲程序,重點是聯合採集。單機爬蟲就是隻在一臺計算機上,叫作單機。
前嗅的ForeSpider數據採集系統就有單機和服務器版,好比只在一臺服務器上的爬蟲,雖然開了多進程,但仍是服務器單機的。
可是若是在多個服務器上,而且可以協同採集,就是分佈式的。