Linux企業級專案實踐之網路爬蟲(9)——通過URL抓取網頁內容
基本URL包含模式(或稱協議)、伺服器名稱(或IP地址)、路徑和檔名,如“協議://授權/路徑?查詢”。完整的、帶有授權部分的普通統一資源標誌符語法看上去如下:協議://使用者名稱:密碼@子域名.域名.頂級域名:埠號/目錄/檔名.檔案字尾?引數=值#標誌
爬蟲系統要處理的URL是指使用超文字傳輸協議HTTP的URL。
URL分為絕對URL和相對URL
絕對URL顯示檔案的完整路徑,這意味著絕對URL本身所在的位置與被引用的實際檔案的位置無關。
相對URL以包含URL本身的資料夾的位置為參考點,描述目標資料夾的位置。如果目標檔案與當前頁面(也就是包含URL的頁面)在同一個目錄,那麼這個檔案的相對URL僅僅是檔名和副檔名,如果目標檔案在當前目錄的子目錄中,那麼它的相對URL是子目錄名,後面是斜槓,然後是目標檔案的檔名和副檔名。
如果要引用檔案層次結構中更高層目錄中的檔案,那麼使用兩個句點和一條斜槓。可以組合和重複使用兩個句點和一條斜槓,從而引用當前檔案所在的硬碟上的任何檔案,
爬蟲系統要處理的URL是指使用超文字傳輸協議HTTP的URL。
URL分為絕對URL和相對URL
絕對URL顯示檔案的完整路徑,這意味著絕對URL本身所在的位置與被引用的實際檔案的位置無關。
相對URL以包含URL本身的資料夾的位置為參考點,描述目標資料夾的位置。如果目標檔案與當前頁面(也就是包含URL的頁面)在同一個目錄,那麼這個檔案的相對URL僅僅是檔名和副檔名,如果目標檔案在當前目錄的子目錄中,那麼它的相對URL是子目錄名,後面是斜槓,然後是目標檔案的檔名和副檔名。
如果要引用檔案層次結構中更高層目錄中的檔案,那麼使用兩個句點和一條斜槓。可以組合和重複使用兩個句點和一條斜槓,從而引用當前檔案所在的硬碟上的任何檔案,
一般來說,對於同一伺服器上的檔案,應該總是使用相對URL,它們更容易輸入,而且在將頁面從本地系統轉移到伺服器上時更方便,只要每個檔案的相對位置保持不變,連結就仍然是有效地。
char * url_normalized(char *url)
{
if (url == NULL) return NULL;
/* rtrim url */
int len = strlen(url);
while (len && isspace(url[len-1]))
len--;
url[len] = '\0';
if (len == 0) {
free(url);
return NULL;
}
/* remove http(s):// */
if (len > 7 && strncmp(url, "http", 4) == 0) {
int vlen = 7;
if (url[4] == 's') /* https */
vlen++;
len -= vlen;
char *tmp = (char *)malloc(len+1);
strncpy(tmp, url+vlen, len);
tmp[len] = '\0';
free(url);
url = tmp;
}
/* remove '/' at end of url if have */
if (url[len-1] == '/') {
url[--len] = '\0';
}
if (len > MAX_LINK_LEN) {
free(url);
return NULL;
}
return url;
}
相關文章
- Linux企業級專案實踐之網路爬蟲(8)——認識URLLinux爬蟲
- Linux企業級專案實踐之網路爬蟲(17)——儲存頁面Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(28)——爬蟲socket處理Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(7)——DNS解析Linux爬蟲DNS
- Linux企業級專案實踐之網路爬蟲(19)——epoll介面Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(4)——主程式流程Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(25)——管理原始碼之SVNLinux爬蟲原始碼
- Linux企業級專案實踐之網路爬蟲(5)——處理配置檔案Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(18)——佇列處理Linux爬蟲佇列
- Linux企業級專案實踐之網路爬蟲(26)——執行緒池Linux爬蟲執行緒
- Linux企業級專案實踐之網路爬蟲(27)——多路IO複用Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(29)——遵守robots.txtLinux爬蟲
- Linux企業級專案實踐之網路爬蟲(21)——擴充套件為多工爬蟲Linux爬蟲套件
- Linux企業級專案實踐之網路爬蟲(13)——處理user-agentLinux爬蟲
- Linux企業級專案實踐之網路爬蟲(14)——使用正規表示式抽取HTML正文和URLLinux爬蟲HTML
- Linux企業級專案實踐之網路爬蟲(10)——處理HTTP狀態碼Linux爬蟲HTTP
- Linux企業級專案實踐之網路爬蟲(11)——處理http請求頭Linux爬蟲HTTP
- Linux企業級專案實踐之網路爬蟲(12)——處理HTTP應答頭Linux爬蟲HTTP
- Linux企業級專案實踐之網路爬蟲(30)——通過查閱RFC文件擴充更加複雜的功能Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(24)——定製規則擴充套件為垂直爬蟲Linux爬蟲套件
- Linux企業級專案實踐之網路爬蟲(22)——編寫爬蟲系統服務控制指令碼Linux爬蟲指令碼
- Linux企業級專案實踐之網路爬蟲(6)——將程式設計成為守護程式Linux爬蟲程式設計
- Linux企業級專案實踐之網路爬蟲(15)——區分文字檔案和二進位制檔案Linux爬蟲
- Linux企業級專案實踐之網路爬蟲(20)——擴充套件成為規則外掛模式Linux爬蟲套件模式
- Linux企業級專案實踐之網路爬蟲(23)——系統測試:找出系統中的bugLinux爬蟲
- 網路爬蟲(一):抓取網頁的含義和URL基本構成爬蟲網頁
- 三種 Python 網路內容抓取工具與爬蟲Python爬蟲
- 爬網入門:JAVA抓取網站網頁內容Java網站網頁
- Linux企業級專案實踐之網路爬蟲(16)——使用base64傳輸二進位制資料Linux爬蟲
- 網路爬蟲之抓取郵箱爬蟲
- wget 網頁爬蟲,網頁抓取工具wget網頁爬蟲
- 爬蟲,可用於增加訪問量和抓取網站全頁內容爬蟲網站
- 網路爬蟲專案爬蟲
- 爬蟲抓取網頁資料原理爬蟲網頁
- [網路爬蟲]使用node.js cheerio抓取網頁資料爬蟲Node.js網頁
- 網路爬蟲專案蒐集爬蟲
- Java網路爬蟲實操(9)Java爬蟲
- python爬蟲:使用BeautifulSoup修改網頁內容Python爬蟲網頁