Linux企業級專案實踐之網路爬蟲(18)——佇列處理
所有的URL都接受管理,並在此進行流動。URL從管理模組的儲存空間開始,一直到最後輸出給磁碟上的URL索引,都由此部分排程。
首先,給出URL排程的一般過程,如圖所示。
其流程的各個具體操作,後面詳述。
要實現前面DNS的無重複有效請求,那麼在這個部分裡設定一個Nsite類,實現這樣的功能:當一個站點請求過DNS後,就把返回的IP儲存到這個類裡,那麼再有這個站點內的URL出現(域名部分相同),就可以使用這個IP,而不必重複請求。
為了從一個URL中很快的找到其對應的Nsite還應該設定一個hash表,
裡面存放著所有Nsite站點,這樣,一個URL可以通過採用計算其域名的雜湊值就快速的找到對應的站點Nsite。如:
NamedSite *namedSiteList;
namedSiteList = new NamedSite[記憶體中的站點數];
首先,給出URL排程的一般過程,如圖所示。
其流程的各個具體操作,後面詳述。
要實現前面DNS的無重複有效請求,那麼在這個部分裡設定一個Nsite類,實現這樣的功能:當一個站點請求過DNS後,就把返回的IP儲存到這個類裡,那麼再有這個站點內的URL出現(域名部分相同),就可以使用這個IP,而不必重複請求。
為了從一個URL中很快的找到其對應的Nsite還應該設定一個hash表,
裡面存放著所有Nsite站點,這樣,一個URL可以通過採用計算其域名的雜湊值就快速的找到對應的站點Nsite。如:
NamedSite *namedSiteList;
namedSiteList = new NamedSite[記憶體中的站點數];
如果這個站點沒有請求過DNS,那麼就加到一個迴圈佇列dnssite中,隨時等待main( )中對其提出排程。如果有就轉移到IPSite中,如果這個IPSite已經加到了okSite,那麼,就把URL打到tab中。隨時等待main( )排程抓取。
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爬蟲
- 企業資料爬蟲專案爬蟲
- 2019最新《網路爬蟲JAVA專案實戰》爬蟲Java
- Java 爬蟲專案實戰之爬蟲簡介Java爬蟲
- 企業資料爬蟲專案(二)爬蟲
- 精通Scrapy網路爬蟲【一】第一個爬蟲專案爬蟲
- 如何處理識別出的網路爬蟲爬蟲
- python網路爬蟲--專案實戰--scrapy嵌入selenium,晶片廠級聯評論爬取(6)Python爬蟲晶片
- [網路爬蟲] 網路爬蟲實踐:大麥網演唱會預約搶票 【待續】爬蟲
- 網路爬蟲——專案實戰(爬取糗事百科所有文章)爬蟲
- 網路爬蟲——爬蟲實戰(一)爬蟲
- Python爬蟲開發與專案實踐(3)Python爬蟲
- 最新《30小時搞定Python網路爬蟲專案實戰》Python爬蟲
- 網路爬蟲專案開發日誌(三):爬蟲上線準備爬蟲
- python爬蟲之處理驗證碼Python爬蟲
- 精通 Python 網路爬蟲:核心技術、框架與專案實戰Python爬蟲框架
- 104個實用網路爬蟲專案資源整理(超全)爬蟲
- 課程設計:python_網路爬蟲專案Python爬蟲
- 爬蟲實戰專案集合爬蟲
- 爬蟲專案實戰(一)爬蟲
- 爬蟲實戰專案合集爬蟲
- Python靜態網頁爬蟲專案實戰Python網頁爬蟲
- [Python] 網路爬蟲與資訊提取(1) 網路爬蟲之規則Python爬蟲
- python網路爬蟲應用_python網路爬蟲應用實戰Python爬蟲
- 視訊教程-Python網路爬蟲開發與專案實戰-PythonPython爬蟲
- Python網路爬蟲實戰Python爬蟲
- 爬蟲專案:大麥網分析爬蟲
- 網路爬蟲之抓取郵箱爬蟲
- 爬蟲專案爬蟲
- 001.01 一般網頁爬蟲處理網頁爬蟲
- Python爬蟲js處理Python爬蟲JS
- python爬蟲實操專案_Python爬蟲開發與專案實戰 1.6 小結Python爬蟲
- 網路爬蟲爬蟲
- 【爬蟲】爬蟲專案推薦 / 思路爬蟲