爬蟲基礎(續)

第二章、爬蟲基礎

2.2 網頁基礎

2.2.1 網頁的組成

網頁分爲三大部分—-HTML、CSS和JavaScript
1.HTML(內容和結構)
網頁的基礎框架就是HTML
開發者工具中Elements選項卡下左邊爲html,右邊爲CSS
2.CSS(佈局)

#head_wrapper.s-ps-islite .s-p-top{
position:absolute;
width:100%;    //寬度100%佔滿父元素
}

這就是一個CSS樣式大括號前#head_wrapper.s-ps-islite .s-p-top就是一個CSS選擇器,此選擇器首先選中id爲head_wrapper且class爲s-ps-islite的節點,然後再選其內部的class爲s-p-top的節點。
3.JavaScript(行爲)
簡稱JS,是一種腳本語言,交互和動態效果就是JavaScript的功勞。HTML中通過script標籤引入JS。

2.2.2 網頁的結構(略)

2.2.3 節點樹及節點間的關係

W3C文檔對象模型(DOM)是中立與平臺和語言的接口.通過HTML DOM,樹中的所有節點都可以通過JavaScript訪問,並且修改或創建或刪除。

2.2.4 選擇器

根據id、class、標籤名篩選
CSS選擇器的語法規則見P91

2.3 爬蟲的基本原理

2.3.1 爬蟲概述

爬蟲就是獲取網頁提取保存信息的自動化程序
1.獲取網頁
urllib、request庫等可以實現HTTP請求操作,得到響應後只需要解析數據結構中的body部分即可以得到網頁的源代碼
2.提取信息
獲取網頁的源代碼後接下來就是分析網頁源代碼,從中提取我們要的數據,用正則表達式提取是一個萬能辦法。還可以根據網頁節點屬性、CSS選擇器或XPath來提取網頁信息的庫,如Beautiful Soup、pyquery、lxml等。
3.保存數據
可以簡單保存爲TXT文本或JSON文本,也可以保存在數據庫中,如MySQL,MongoDB等,甚至保存至遠程服務器,如藉助SFTP來操作。
4.自動化程序
爬蟲就是代替人來完成爬蟲工作的自動化程序,並且能進行各種異常處理、錯誤重試等。

2.3.2 能抓怎樣的數據

可能有些網頁返回的不是HTML代碼,而是JSON字符串(API接口大多采用這樣的形式),它們同樣可以抓取。還可以抓取一些圖片、視頻等,只要在瀏覽器中可以訪問到的都可以抓取。

2.3.3 JavaScript渲染頁面

有時用urllib或requests抓取網頁時,得到的源代碼實際和瀏覽器中看到的不一樣。現在原來越多的網頁採用AJax、前端模塊化工具來構建,整個網頁可能都是由JavaScript渲染出來的,原始HTML代碼就只是一個空殼。用urllib或requests等庫請求這些網頁時,得到的只是HTML代碼,它不會繼續去加載這個JavaScript文件。如下代碼

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>this is demo</title>
</head>
<body>
<div id="id">
</div>
</body>
<script src="app.js"></script>
</html>

對於這種情況,我們可以分析其後臺AJax接口,也可使用Selenium、Splash等庫實現模擬JavaScript渲染。

2.4 回話和Cookies

2.4.1 靜態網頁和動態網頁

&搭建最簡單的網站&
我們保存一個html文件,然後把它放在某臺具有固定公網IP的主機上,主機上安裝Apache或Nginx等服務器,這臺主機就可以作爲服務器了,其他人便可以訪問服務器看到這個頁面。

2.4.2 無狀態HTTP

HTTP的無狀態是指HTTP協議對事務處理沒有記憶功能的,也就是服務器不知道客戶端是什麼狀態。這種肯定不是我們想要的。這時出現了會話和Cookies這兩個保持HTTP連接狀態的技術。會話在服務器端,用來保存用戶的回話信息;Cookies在客戶端,有了Cookies瀏覽器在下次訪問網頁時會自動附帶上它發送給服務器,服務器通過識別Cookies並鑑定是哪個用戶,然後判斷用戶是否是登錄狀態,然後返回對應的響應。
可以理解爲Cookies裏保存了登錄的憑證,有了它,只需要在下次請求攜帶Cookies發送請求而不必重新輸入用戶名、密碼等信息重新登錄。所以在爬蟲中,有時候處理需要登錄才能訪問的頁面時,我們一般會直接將登錄成功後獲取的Cookies放在請求頭裏面直接請求,不必重新模擬登錄。
1.會話
會話對象用來存儲特定用戶會話所需的屬性及配置信息。
2.Cookies
指某些網站爲了辨別用戶身份、進行會話跟蹤而存儲在用戶本地終端上的數據。

  • 會話維持
    當客戶端第一次請求服務器時,服務器會返回一個請求頭中帶有set-Cookie字段的響應給客戶端,用來標記哪一個用戶,客戶端瀏覽器會把Cookies保存起來。當瀏覽器下一次訪問該網站時,瀏覽器會把此Cookies放到請求頭一起提交給服務器,Cookies攜帶了會話ID信息,服務器檢查該Cookies即可找到對應會話是什麼,然後判斷會話來辨認用戶狀態。
    Cookies和會話需要配合,才能實現登錄會話控制。
  • 屬性結構
    開發者工具中打開application選項卡,左側的storage中有cookies,將其點開,每一個條目即使有個cookie。
    每個cookie有如下屬性
    name:一旦創建不能更改
    value:如果值爲unicode字符,需要爲字符編碼,如果爲二進制數據,需要使用BASE64編碼
    domain:可以訪問該cookie的域名
    max age:該cookie失效時間,單位s,如果爲負數,則關閉瀏覽器時,cookie就失效
    path:該cookie的使用路徑
  • 會話cookie和持久cookie
    會話cookie就是把cookie放在瀏覽器內存裏,關閉瀏覽器後該cookie即失效;
    持久cookie則會保存到客戶端的硬盤裏,下次可以繼續使用 ;
    嚴格來說,沒有會話cookie和持久cookie之分,只是由Cookie的max age或expires字段決定過期時間。

2.5 代理的基本原理

2.5.1 基本原理

代理實際就是代理服務器,它是網絡信息的中轉站。

2.5.2 代理的作用

  • 訪問平時不能訪問的站點
  • 訪問一些單位或團體內部
  • 提高訪問速度
  • 隱藏真實IP

2.5.3 常見代理設置

  • 使用免費代理:最好使用高匿代理
  • 使用付費代理服務
  • ADSL撥號 :撥一次換一次IP
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章