爬蟲urllib and 正則總結

2021-09-26 23:11:55 字數 2827 閱讀 3581

urllib:

是python自帶抓取網頁的其中的一種

urllib的三個屬性:

request: 它是最基本的http請求模組,可以用來模擬傳送請求,就像在瀏覽器中輸入**,然後敲擊回車鍵一樣

error: 異常處理模組,如果出現請求錯誤,我們可以使用這個模組來捕獲異常,然後進行重試或者其他操作,保證程式不會意外終止.

parse: 這乙個工具模組,提供了許多url的處理方法,比如拆分,解析,合併

urllib裡的urlopen的常見引數用法:

* url:設定目標url

* data:如果設定該引數,則請求預設為post請求

* timeout:用於設定超時時間,單位為秒

* context:必須是乙個ssl.sslcontext型別,用來指定ssl設定,忽略未認證的ca證書

urilib的request:

使用urlopen直接傳送請求,獲取一些反爬手段低的**,有些**會根據請求頭來判斷是否是瀏覽器訪問,則需要增加http報頭,必須建立乙個 request 例項來作為urlopen()的引數;而需要訪問的url位址則作為 request 例項的引數。

* url 引數是請求鏈結,這個是必傳引數,其他的都是可選引數。

* data(預設空) 引數跟 urlopen() 中的 data 引數用法相同。

* headers(預設空) 是乙個字典。它除了在 request 中新增,還可以通過呼叫 reques t例項的 add_header() 方法來新增請求頭。

* unverifiable 引數表示這個請求是否是無法驗證的,預設值是false。意思就是說使用者沒有足夠許可權來選擇接收這個請求的結果。例如我們請求乙個html文件中的,但是我們沒有自動抓取影象的許可權,我們就要將 unverifiable 的值設定成 true。(這個引數我們不需要設定)

* method 引數指的是發起的 http 請求的方式

urllib 的異常錯誤及錯誤處理

urlerror:來自urllib庫的error模組,繼承自oserror,由request模組產生的異常都可以通過捕捉這個類來處理.

產生的原因主要有:

* 沒有網路連線

* 伺服器連線失敗

* 找不到指定的伺服器

它具有乙個屬性reason,返回錯誤的原因

* httperror是urlerror的子類,我們發出乙個請求時,伺服器上都會對應乙個response應答物件,其中它包含乙個數字"響應狀態碼"。

* 專門用來處理http請求錯誤,比如未認證,頁面不存在等

* 有三個屬性:

* code:返回http的狀態碼

* reason:返回錯誤原因

* headers:返回請求頭

具體使用,因為httperror的父類是urlerror,所以我們更好的處理順序應該是先捕獲子類的錯誤,再捕獲父類的錯誤

parse模組下常用的url解析、合併、編碼、解碼方法

用時先導入

from urllib import parse
parse裡面的幾種用法:

urlencode()將字典構形式的引數序列化為url編碼後的字串

parse_qs()將url編碼格式的引數反序列化為字典型別

quote()可以將中文轉換為url編碼格式

unquote:可以將url編碼進行解碼

urljoin()傳遞乙個基礎鏈結,根據基礎鏈結可以將某乙個不完整的鏈結拼接為乙個完整鏈結

urlparse()實現url的識別和分段

urlunparse()可以實現url的構造

正則的用法:

匹配單個字元

.  匹配除了換行符之外的任意字元

\d 匹配數字0-9 =>[0-9] => ^\d

\d 匹配非數字

\s 匹配空白字元(空格 \n \r \t)

\s 匹配非空白字元

\w 匹配單詞字元[a-za-z0-9_]

\w 匹配非單詞字元

^ 以...開頭

$ 以...結尾

[0-9a-z] :表示匹配數字0~9,字母a~z

[^a-z] : 不匹配a-z之間的字元

#多字元匹配,貪婪模式

* 匹配*號前的字元任意次數

+ 匹配+號前的字元至少一次

?匹配?號前的字元0~1次

#多字元匹配,非貪婪模式 (abcdeabcde) e

*?

+???

| 或

() 分組

正則的五種用法:

re.match():匹配字串的開頭,有符合正則規則則子串,返回結果match物件,

沒有匹配到結果,返回none,單次匹配

re.search():從字串開頭,在整個字串中進行匹配,有符合正則規則則子串

,返回結果match物件,沒有匹配到結果,返回none,單次匹配

re.findall():在整個字串中匹配所有符合正則規則的結果,返回乙個list

re.finditer():在整個字串中匹配所有符合正則規則的結果,返回乙個可疊代物件

re.sub():在整個字串中,替換所有符合正規表示式的子串

re.split() :根據正規表示式,分割字串,返回乙個list

正則爬蟲案例

coding utf 8 import requests import reimport json url 豆瓣網 defget page url 獲取網頁上的資料 response html requests.get url return response html.text defrun url...

爬蟲基礎 正則基礎

re模組是python 中專門處理正則相關的模組 下面專門介紹一下正規表示式。相關的正則測試 推薦乙個。re.match 嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match 就返回none。re.match pattern,string,falg 0 import re co...

go爬蟲 goquery 正則

用了goquery 和regexp兩個包 用法如query dom,err goquery.newdocumentfromreader strings.newreader result if err nil dom.find programlist cont ul p each func i int...