2.3 網絡基礎知識
除了使用Python之外,爬蟲涉及的基本技術包括HTTP、requests庫和BeautifulSoup庫。
HTTP是指超文本傳輸協議,是一種網絡通信協議。
requests庫是一個專門用于編寫爬蟲的請求庫。
BeautifulSoup庫是一個專門用于解析爬蟲所爬取的頁面數據的解析庫。
2.3.1 HTML
1.HTML基礎
HTML(Hyper Text Markup Language,超文本標記語言)使用起來比較簡單,功能強大,具有可擴展性、平臺無關性、通用性的特性。它以標簽的形式描述網頁的內容,因此,HTML并不是一種編程語言,而是一種標記語言。網頁本身就是一個文本文件,通過在文本文件中加入特定標記,讓瀏覽器能夠快速、順序地識別網頁內容。
2.HTML頁面基本結構
<!DOCTYPE html>表示這是一個文本類型的HTML文件。
<html>表示這是一個文本類型,并且遵守的是HTML規范和標準。
<head>表示頁面的頭部信息,用于描述頁面的概要信息,如標題、語言、字符集等。
<meta>表示頁面的元信息,即基本信息。它放在<head>標簽之中,可以實現對網頁的特定操作,如是否清除頁面緩存,還可以給搜索引擎提供搜索支持等。
<title>表示頁面的標題。
<body>表示頁面的主體內容。瀏覽器的顯示區域就是<body>的工作范圍。<body>可以被看成一個容器,里面可以包含其他標簽。
3.一個HTML實例
使用記事本編寫HTML網頁內容,如圖2-2所示。用瀏覽器渲染的效果如圖2-3所示。

圖2-2 HTML網頁內容

圖2-3 HTML渲染效果
2.3.2 URI和URL
URI(Uniform Resource Identifier,通用資源標識符)由包括確定語法和相關協議的方案所定義。Web上可用的每種資源,如HTML文件、圖像、視頻片段、程序等由一個URI進行定位。URI是以一種抽象的、高層次概念定義統一資源標識,而URL(Uniform Resource Locator,統一資源定位符)則是具體的資源標識的方式。URL是URI的一個子集。
URL是一種具體的URI,即URL可以用來標識一個資源,而且指明了如何定位這個資源。URL是對互聯網上可得到的資源的位置和訪問方法的一種簡潔表示,是互聯網上標準資源的地址。互聯網上的每個文件都有一個唯一的URL,它包含的信息指出文件的位置以及瀏覽器應該怎么處理它。圖2-4所示為一個URL,其各個組成部分的含義如下:http表示使用的網絡協議;hostname是解析后指向的IP地址;port表示程序指定的端口號;/CSS是需要訪問的文件路徑;?后面跟傳遞的參數;#表示指定的頁面位置。

圖2-4 URL內容
2.3.3 HTTP
HTTP是一種網絡通信協議,主要包括URL、Request和Response。
網絡中的設備能夠基于該協議進行網絡資源的交互,就像兩個使用不同語言的人需要交流一樣,如果都說自己的語言對方肯定聽不懂,但要是雙方都會英語,那就可以交流了。在網絡中,這樣的交流發生在客戶端和服務器之間。客戶端的瀏覽器通常是具體請求Request的發起者,而服務器通過Response響應數據返回給客戶端瀏覽器。客戶端和服務器之間交流的內容通常是由Text文本、CSS層疊樣式表、Image圖片、Video視頻、Script腳本等內容組成的Web文件,如圖2-5所示。

圖2-5 HTTP交互內容
2.3.4 Request和Response
在網絡通信過程中,需要使用基于HTTP的Request(請求)向URL所在的服務器請求數據。然后,該服務器通過Response(響應)將需要的數據返回客戶端。實際上,輸入URL后,瀏覽器給Web服務器發送了一個Request,Web服務器收到Request之后進行處理,生成相應的Response,然后發送給瀏覽器,瀏覽器解析Response中的HTML,這樣用戶就看到了網頁,其過程如圖2-6所示。

圖2-6 Request和Response交互過程
Request是指通過客戶端瀏覽器向服務器發起信息請求的內容。通過把需要請求的具體內容按照特定的網絡協議進行編碼,包括瀏覽器的信息、HTTP的狀態參數以及客戶端的Cookie。因此,服務器收到Request之后就可以清楚地知道是誰在請求數據、它有沒有請求過數據、對應客戶端的Session是否有內容,以及應該返回哪些數據。
Response是指通過服務器向客戶端返回數據的響應。服務器在收到客戶端請求之后,根據客戶端提供的需求和狀態,立刻生成對應的頁面信息和Cookie,并返回給客戶端。
圖2-7所示是訪問百度首頁過程中Request和Response的交互信息。

圖2-7 訪問百度首頁過程中Request和Response的交互信息