Linux企業級專案實踐之網路爬蟲(8)——認識URL
URL是Uniform Resource Location的縮寫,譯為“統一資源定位符”。也可以說,URL是Internet上用來描述資訊資源的字串,主要用在各種WWW客戶程式和伺服器程式上。採用URL可以用一種統一的格式來描述各種資訊資源,包括檔案、伺服器的地址和目錄等。URL的格式由三部分組成:第一部分是協議(或稱為服務方式)。第二部分是存有該資源的主機IP地址,包括埠號,預設為80。第三部分是主機資源的具體地址,即目錄和檔名。
爬蟲系統要處理的URL
在這裡,爬蟲系統要處理的URL是指使用超文字傳輸協議HTTP的URL,其埠號預設是80。第三部分是Web伺服器上資源的具體地址,即相對路徑。一般來說,在Web頁面上提取出來的URL,如果是這個站點內部的,那麼多是相對地址,而且可能要進行URL編碼,所以要採用過濾技術,把這些不規範的URL進行解碼,規範化。
進行URL的排程:
爬蟲程式在分析頁面時,會提取出來各種URL,比如,這個站點內的,或這個站點外的,甚至失效的URL。那麼,對於這些不同的URL,同爬行演算法一致,它們的優先順序應該是各不相同的,哪一個的DNS請求已經獲得到並可以立即進行連線?哪一個是失效的、錯誤的,應該立即丟棄掉?或者哪一個是從高優先順序空間中得到的,應該無條件的,以高優先的狀態進行連線,都是需要進行合理,穩妥,高效的排程。
解決方案:
首先,應該明確,這裡所有的URL都應該是優先順序清晰的。否則,所有URL排程將因為沒有級別權重、優先順序而變的混亂不堪。其次,應該設定合適的儲存空間,不能把所有的URL都堆積到一塊,那樣既談不到優先順序清晰,更不要說快速提取。那麼,解決方案如下:
採用URL的多級儲存架構。
給每一級結構都分配不同的排程優先順序。
爬蟲系統要處理的URL
在這裡,爬蟲系統要處理的URL是指使用超文字傳輸協議HTTP的URL,其埠號預設是80。第三部分是Web伺服器上資源的具體地址,即相對路徑。一般來說,在Web頁面上提取出來的URL,如果是這個站點內部的,那麼多是相對地址,而且可能要進行URL編碼,所以要採用過濾技術,把這些不規範的URL進行解碼,規範化。
進行URL的排程:
爬蟲程式在分析頁面時,會提取出來各種URL,比如,這個站點內的,或這個站點外的,甚至失效的URL。那麼,對於這些不同的URL,同爬行演算法一致,它們的優先順序應該是各不相同的,哪一個的DNS請求已經獲得到並可以立即進行連線?哪一個是失效的、錯誤的,應該立即丟棄掉?或者哪一個是從高優先順序空間中得到的,應該無條件的,以高優先的狀態進行連線,都是需要進行合理,穩妥,高效的排程。
解決方案:
首先,應該明確,這裡所有的URL都應該是優先順序清晰的。否則,所有URL排程將因為沒有級別權重、優先順序而變的混亂不堪。其次,應該設定合適的儲存空間,不能把所有的URL都堆積到一塊,那樣既談不到優先順序清晰,更不要說快速提取。那麼,解決方案如下:
採用URL的多級儲存架構。
給每一級結構都分配不同的排程優先順序。
各個級別的結構之間進行合適的資料通訊。
void push_surlqueue(Surl *url)
{
if (url != NULL && surl_precheck(url)) {
SPIDER_LOG(SPIDER_LEVEL_DEBUG, "I want this url: %s", url->url);
pthread_mutex_lock(&sq_lock);
surl_queue.push(url);
if (surl_queue.size() == 1)
pthread_cond_signal(&sq_cond);
pthread_mutex_unlock(&sq_lock);
}
}
Url * pop_ourlqueue()
{
Url *url = NULL;
pthread_mutex_lock(&oq_lock);
if (!ourl_queue.empty()) {
url = ourl_queue.front();
ourl_queue.pop();
pthread_mutex_unlock(&oq_lock);
return url;
} else {
int trynum = 3;
struct timespec timeout;
while (trynum-- && ourl_queue.empty()) {
get_timespec(&timeout, 500); /* 0.5s timeout*/
pthread_cond_timedwait(&oq_cond, &oq_lock, &timeout);
}
if (!ourl_queue.empty()) {
url = ourl_queue.front();
ourl_queue.pop();
}
pthread_mutex_unlock(&oq_lock);
return url;
}
}
相關文章
- 網路爬蟲專案爬蟲
- Python網路爬蟲實戰專案大全 32個Python爬蟲專案demoPython爬蟲
- 網路爬蟲(python專案)爬蟲Python
- 專案--python網路爬蟲Python爬蟲
- Python網路爬蟲實戰小專案Python爬蟲
- Python網路爬蟲實戰專案大全!Python爬蟲
- 企業資料爬蟲專案爬蟲
- Java網路爬蟲實操(8)Java爬蟲
- 2019最新《網路爬蟲JAVA專案實戰》爬蟲Java
- Java 爬蟲專案實戰之爬蟲簡介Java爬蟲
- 企業資料爬蟲專案(二)爬蟲
- 精通Scrapy網路爬蟲【一】第一個爬蟲專案爬蟲
- python網路爬蟲--專案實戰--scrapy嵌入selenium,晶片廠級聯評論爬取(6)Python爬蟲晶片
- [網路爬蟲] 網路爬蟲實踐:大麥網演唱會預約搶票 【待續】爬蟲
- 網路爬蟲——專案實戰(爬取糗事百科所有文章)爬蟲
- 網路爬蟲——爬蟲實戰(一)爬蟲
- Python爬蟲開發與專案實踐(3)Python爬蟲
- 最新《30小時搞定Python網路爬蟲專案實戰》Python爬蟲
- 網路爬蟲專案開發日誌(三):爬蟲上線準備爬蟲
- 精通 Python 網路爬蟲:核心技術、框架與專案實戰Python爬蟲框架
- 104個實用網路爬蟲專案資源整理(超全)爬蟲
- 課程設計:python_網路爬蟲專案Python爬蟲
- 爬蟲實戰專案集合爬蟲
- 爬蟲專案實戰(一)爬蟲
- 爬蟲實戰專案合集爬蟲
- Python靜態網頁爬蟲專案實戰Python網頁爬蟲
- [Python] 網路爬蟲與資訊提取(1) 網路爬蟲之規則Python爬蟲
- python網路爬蟲應用_python網路爬蟲應用實戰Python爬蟲
- 視訊教程-Python網路爬蟲開發與專案實戰-PythonPython爬蟲
- Python網路爬蟲實戰Python爬蟲
- 識別網路爬蟲的策略分析爬蟲
- 爬蟲專案:大麥網分析爬蟲
- 網路爬蟲之抓取郵箱爬蟲
- 爬蟲專案爬蟲
- python爬蟲實操專案_Python爬蟲開發與專案實戰 1.6 小結Python爬蟲
- 手把手教你寫網路爬蟲(7):URL去重爬蟲
- 網路爬蟲爬蟲
- 【爬蟲】爬蟲專案推薦 / 思路爬蟲
- Python網路爬蟲實踐案例:爬取貓眼電影Top100Python爬蟲