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...