爬蟲細節總結

b10l07發表於2018-12-30

request:

request物件是從客戶端向伺服器發出請求,包括使用者提交的資訊以及客戶端的一些資訊。客戶端可通過HTML表單或在網頁地址後面提供引數的方法提交資料,然後通過request物件的相關方法來獲取這些資料。

在爬蟲中的request其實就是通過python向伺服器發出request請求(客戶端向伺服器端發起請求),得到其返回的資訊。

Request中包含什麼?

基本GET請求(URL  headers引數 和 parmas引數)

1. 最基本的GET請求可以直接用get方法

response = requests.get("http://www.baidu.com/")

- response的常用方法:

    - response.text 返回解碼後的字串

    - respones.content 以位元組形式(二進位制)返回。

    - response.status_code  響應狀態碼

    - response.request.headers  請求的請求頭

    - response.headers  響應頭

    - response.encoding = 'utf-8' 可以設定編碼型別

    - response.encoding 獲取當前的編碼

    - response.json() 內建的JSON解碼器,以json形式返回,前提返回的內容確保是json格式的,不然解析出錯會拋異常

基本POST請求(data引數)

最基本的GET請求可以直接用post方法


9128313-79bc27e1b70fd31d.png

2. 傳入data資料

對於 POST 請求來說,我們一般需要為它增加一些引數。那麼最基本的傳參方法可以利用 data 這個引數

正規表示式(re)

為什麼要學正規表示式?

因為我們下載下了的資料是全部的網頁,這些資料很龐大並且很混亂,大部分的東西使我們不關心的,因此我們需要將之按我們的需要過濾和匹配出來。

那麼對於文字的過濾或者規則的匹配,最強大的就是正規表示式,是Python爬蟲世界裡必不可少的神兵利器。

正規表示式:又稱規則表示式,通常被用來檢索、替換那些符合某個模式(規則)的文字。

使用正規表示式要達到的目的是什麼呢?

- 給定的字串是否符合正規表示式的過濾邏輯(“匹配”);

- 通過正規表示式,從文字字串中獲取我們想要的特定部分(“過濾”)


9128313-daf16e6b9eb9bfd2.png

正規表示式的匹配規則如下:


9128313-d835f8c35ab39042.png

Python 的 re 模組

在 Python 中,我們可以使用內建的 re 模組來使用正規表示式。

re 模組的一般使用步驟如下:

- 使用 compile() 函式將正規表示式的字串形式編譯為一個 Pattern 物件

- 通過 Pattern 物件提供的一系列方法對文字進行匹配查詢,獲得匹配結果,一個 Match 物件。

- 最後使用 Match 物件提供的屬性和方法獲得資訊,根據需要進行其他的操作

compile 函式

compile 函式用於編譯正規表示式,生成一個 Pattern 物件

findall

findall 以列表形式返回全部能匹配的子串,如果沒有匹配,則返回一個空列表。


9128313-a4b0fa0994138705.png

正則規則學習參考網站:正則學習網站

xpath選擇器

我正則用的不好,處理HTML文件很累,有沒有其他的方法?

有!那就是XPath,我們可以先將 HTML檔案 轉換成 XML文件,然後用 XPath 查詢 HTML 節點或元素。

什麼是XPath?

XPath (XML Path Language) 是一門在 XML 文件中查詢資訊的語言,可用來在 XML 文件中對元素和屬性進行遍歷。


9128313-30b026b02339998e.png

文件:w3c官方文件xpath

注意:在使用XPath的語法運用到Python抓取時要先轉換為xml。

lxml庫

lxml 是 一個HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML 資料。

lxml  Python官方文件

初步使用

我們利用它來解析 HTML 程式碼,簡單示例:


9128313-9e2d889307a1e07f.png

xpath  參考資料


BeautifulSoup4選擇器

和 lxml 一樣,Beautiful Soup 也是一個HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 資料。

lxml 只會區域性遍歷,而Beautiful Soup 是基於HTML DOM的,會載入整個文件,解析整個DOM樹,因此時間和記憶體開銷都會大很多,所以效能要低於lxml。

BeautifulSoup 用來解析 HTML 比較簡單,API非常人性化,支援CSS選擇器、Python標準庫中的HTML解析器,也支援 lxml 的 XML解析器。

官方文件

例子:

9128313-a9aae36173f0c33d.png
9128313-f4da0764d8f651e3.png


9128313-d7ffb19c5bc7fdc2.png

PyQuery簡介

pyquery相當於jQuery的python實現,可以用於解析HTML網頁等。它的語法與jQuery幾乎完全相同,對於使用過jQuery的人來說很熟悉,也很好上手

中文教程

官方文件

#pyquery語法規則類似於Jquery,可以對html文字進行解析

pq('css選擇器')

items():獲取到多個標籤時,使用items()將PyQuery轉換為一個生成器

然後在使用for in 迴圈filter('css選擇器'):過濾text():獲取標籤的文字attr('屬性名')獲取屬性值

9128313-8d9332e6ae441fa5.png

什麼是多執行緒?

CPU是計算機計算的基本單位,用來計算和處理任務  可以包含多個程式,程式中可以包含多個執行緒,程式、執行緒、鎖lock(阻塞)。

多執行緒,密集的I/O操作、讀寫

多程式:用於密集的計算,一個cpu只能執行一個程式

使用多執行緒會讓爬蟲進行多工的爬取。快捷,高效。


9128313-80788d6796b44ff6.png
原理圖


9128313-099751712b703187.png

什麼是selenium?

Selenium是一個Web的自動化測試工具,最初是為網站自動化測試而開發的,型別像我們玩遊戲用的按鍵精靈,可以按指定的命令自動操作,不同是Selenium 可以直接執行在瀏覽器上,它支援所有主流的瀏覽器(包括PhantomJS這些無介面的瀏覽器)。 Selenium 可以根據我們的指令,讓瀏覽器自動載入頁面,獲取需要的資料,甚至頁面截圖,或者判斷網站上某些動作是否發生。

它用於爬蟲中的作用?

Selenium測試直接執行在瀏覽器中,就像真正的使用者在操作一樣。支援的瀏覽器包括IE、Mozilla Firefox、Mozilla Suite等。使用它爬取頁面也十分方便,只需要按照訪問步驟模擬人在操作就可以了,完全不用操心Cookie,Session的處理,它甚至可以幫助你輸入賬戶,密碼,然後點選登陸按鈕。


9128313-bb987cf79c36f4d5.png
9128313-cfc431402f93833d.png
9128313-d7fdbcb3f5e311e6.png

相關文章