Linux企業級專案實踐之網路爬蟲(7)——DNS解析
DNS 是Domain Name Service的縮寫。域名系統為Internet上的主機分配域名地址和IP地址。IP地址不易於記憶,然而域名地址相比較而言是方便於記憶的。使用者如果使用域名地址,當想獲得IP地址時,就要向域名伺服器傳送請求。這個域名伺服器就會自動把域名地址轉為IP地址返回給使用者。
爬蟲程式優化DNS請求的必要性
當爬蟲程式從HTML頁面上提取URL時,一般情況下,應該有很多都是這個站點內部的URL。那麼當這個站點裡的某個URL請求過DNS以後,就應該採用某種資料結構把這個值儲存起來。以後再發現這個站點內的URL後,就把域名部分的IP取出給這個URL,從而減少不必要的DNS請求。這樣可以大大加快抓取頁面的速度,提高效率。
優化DNS請求的方式
爬蟲程式優化DNS請求的必要性
當爬蟲程式從HTML頁面上提取URL時,一般情況下,應該有很多都是這個站點內部的URL。那麼當這個站點裡的某個URL請求過DNS以後,就應該採用某種資料結構把這個值儲存起來。以後再發現這個站點內的URL後,就把域名部分的IP取出給這個URL,從而減少不必要的DNS請求。這樣可以大大加快抓取頁面的速度,提高效率。
優化DNS請求的方式
對於同一個站點內部的頁面應該設一個資料結構以儲存,並且方便查詢。這樣,當爬蟲系統得到了一個新的URL以後,可以快速的轉換地址格式並進行連線。
void * urlparser(void *none)
{
Surl *url = NULL;
Url *ourl = NULL;
map<string, string>::const_iterator itr;
while(1) {
pthread_mutex_lock(&sq_lock);
while (surl_queue.empty()) {
pthread_cond_wait(&sq_cond, &sq_lock);
}
url = surl_queue.front();
surl_queue.pop();
pthread_mutex_unlock(&sq_lock);
ourl = surl2ourl(url);
itr = host_ip_map.find(ourl->domain);
if (itr == host_ip_map.end()) { /* not found */
/* dns resolve */
event_base * base = event_init();
evdns_init();
evdns_resolve_ipv4(ourl->domain, 0, dns_callback, ourl);
event_dispatch();
event_base_free(base);
} else {
ourl->ip = strdup(itr->second.c_str());
push_ourlqueue(ourl);
}
}
//evdns_base_free(dnsbase, 0);
//event_base_free(base);
return NULL;
}
相關文章
- Linux企業級專案實踐之網路爬蟲(28)——爬蟲socket處理Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(19)——epoll介面Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(4)——主程式流程Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(8)——認識URLLinux爬蟲
- Linux企業級專案實踐之網路爬蟲(25)——管理原始碼之SVNLinux爬蟲原始碼
- Linux企業級專案實踐之網路爬蟲(5)——處理配置檔案Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(21)——擴充套件為多工爬蟲Linux爬蟲套件
- Linux企業級專案實踐之網路爬蟲(17)——儲存頁面Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(18)——佇列處理Linux爬蟲佇列
- Linux企業級專案實踐之網路爬蟲(26)——執行緒池Linux爬蟲執行緒
- Linux企業級專案實踐之網路爬蟲(27)——多路IO複用Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(29)——遵守robots.txtLinux爬蟲
- Linux企業級專案實踐之網路爬蟲(13)——處理user-agentLinux爬蟲
- Linux企業級專案實踐之網路爬蟲(10)——處理HTTP狀態碼Linux爬蟲HTTP
- Linux企業級專案實踐之網路爬蟲(11)——處理http請求頭Linux爬蟲HTTP
- Linux企業級專案實踐之網路爬蟲(12)——處理HTTP應答頭Linux爬蟲HTTP
- Linux企業級專案實踐之網路爬蟲(24)——定製規則擴充套件為垂直爬蟲Linux爬蟲套件
- Linux企業級專案實踐之網路爬蟲(9)——通過URL抓取網頁內容Linux爬蟲網頁
- Linux企業級專案實踐之網路爬蟲(22)——編寫爬蟲系統服務控制指令碼Linux爬蟲指令碼
- Linux企業級專案實踐之網路爬蟲(6)——將程式設計成為守護程式Linux爬蟲程式設計
- Linux企業級專案實踐之網路爬蟲(15)——區分文字檔案和二進位制檔案Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(14)——使用正規表示式抽取HTML正文和URLLinux爬蟲HTML
- Linux企業級專案實踐之網路爬蟲(20)——擴充套件成為規則外掛模式Linux爬蟲套件模式
- Linux企業級專案實踐之網路爬蟲(23)——系統測試:找出系統中的bugLinux爬蟲
- Linux企業級專案實踐之網路爬蟲(16)——使用base64傳輸二進位制資料Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(30)——通過查閱RFC文件擴充更加複雜的功能Linux爬蟲
- 網路爬蟲專案爬蟲
- 企業資料爬蟲專案爬蟲
- 網路爬蟲專案蒐集爬蟲
- 企業資料爬蟲專案(二)爬蟲
- Java網路爬蟲實操(7)Java爬蟲
- Python網路爬蟲實戰專案大全 32個Python爬蟲專案demoPython爬蟲
- 專案--python網路爬蟲Python爬蟲
- 網路爬蟲(python專案)爬蟲Python
- Python網路爬蟲實戰小專案Python爬蟲
- Python網路爬蟲實戰專案大全!Python爬蟲
- Java 爬蟲專案實戰之爬蟲簡介Java爬蟲
- 精通Scrapy網路爬蟲【一】第一個爬蟲專案爬蟲