Linux企業級專案實踐之網路爬蟲(17)——儲存頁面
在爬蟲系統中資料的流量相當大,要處理的資料內容不僅包括爬蟲系統的各種資料結構空間,而且包括從外部節點中得到的各種資料,比如HTTP請求,HTML頁面,ROBOT.TXT等等。如果對這些內容處理不當,那麼不僅造成空間的冗餘浪費,使爬蟲程式效率降低,而且還可能會使系統崩潰。所以,要有合適的空間分配策略。
空間分配與管理方案。
在記憶體中使用緩衝空間,以快速的得到、儲存資料。
統一各種請求的結構,應該合理利用並在每次用完後進行回收。比如,ROBOT.TXT檔案,HTTP請求頭及相應的應答。這種方式,在站點數目數量相當龐大的情況下,非常有必要。
空間分配與管理方案。
在記憶體中使用緩衝空間,以快速的得到、儲存資料。
統一各種請求的結構,應該合理利用並在每次用完後進行回收。比如,ROBOT.TXT檔案,HTTP請求頭及相應的應答。這種方式,在站點數目數量相當龐大的情況下,非常有必要。
在頁面的抓取部分和儲存部分之間設定合適的介面,直接進行資料交換,從而使系統不必分配更多的空間來緩衝資料。資料緩衝功能由儲存部分內部實現。
static int handler(void * data) {
Response *r = (Response *)data;
if (strstr(r->header->content_type, "text/html") == NULL)
return MODULE_ERR;
char *fn = url2fn(r->url);
int fd = -1;
if ((fd = open(fn, O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0) {
return MODULE_ERR;
}
int left = r->body_len;
int n = -1;
while (left) {
if ((n = write(fd, r->body, left)) < 0) {
// error
close(fd);
unlink(fn);
free(fn);
return MODULE_ERR;
} else {
left -= n;
}
}
close(fd);
free(fn);
return MODULE_OK;
}
相關文章
- Linux企業級專案實踐之網路爬蟲(28)——爬蟲socket處理Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(7)——DNS解析Linux爬蟲DNS
- Linux企業級專案實踐之網路爬蟲(19)——epoll介面Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(4)——主程式流程Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(8)——認識URLLinux爬蟲
- Linux企業級專案實踐之網路爬蟲(9)——通過URL抓取網頁內容Linux爬蟲網頁
- Linux企業級專案實踐之網路爬蟲(25)——管理原始碼之SVNLinux爬蟲原始碼
- Linux企業級專案實踐之網路爬蟲(5)——處理配置檔案Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(21)——擴充套件為多工爬蟲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企業級專案實踐之網路爬蟲(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爬蟲
- 網路爬蟲專案爬蟲
- 企業資料爬蟲專案爬蟲
- 網路爬蟲專案蒐集爬蟲
- 【0基礎學爬蟲】爬蟲基礎之檔案儲存爬蟲
- 企業資料爬蟲專案(二)爬蟲
- Python靜態網頁爬蟲專案實戰Python網頁爬蟲
- Python網路爬蟲實戰專案大全 32個Python爬蟲專案demoPython爬蟲
- 專案--python網路爬蟲Python爬蟲
- 網路爬蟲(python專案)爬蟲Python
- Python網路爬蟲實戰小專案Python爬蟲
- Python網路爬蟲實戰專案大全!Python爬蟲
- Java 爬蟲專案實戰之爬蟲簡介Java爬蟲