urllib庫的基本使用
所謂網(wǎng)頁抓取,就是把URL地址中指定的網(wǎng)絡(luò)資源從網(wǎng)絡(luò)流中讀取出來,保存到本地。
urllib的模塊:
request: 它是最基本的HTTP請求模塊,可以用來模擬發(fā)送請求,就像在瀏覽器中輸入網(wǎng)址,然后敲擊回車鍵一樣,使用的時候只需要給庫方法傳入相關(guān)的URL和相關(guān)的參數(shù)即可
error: 異常處理模塊,如果出現(xiàn)請求錯誤,我們可以使用這個模塊來捕獲異常,然后進(jìn)行重試或者其他操作,保證程序不會意外終止.
parse: 這是一個工具模塊,提供了許多url的處理方法,比如拆分,解析,合并等等
常用參數(shù):
url:設(shè)置目標(biāo)url
data:如果設(shè)置該參數(shù),則請求默認(rèn)為post請求
timeout:用于設(shè)置超時時間,單位為秒
context:必須是一個ssl.SSLContext類型,用來指定SSL設(shè)置,忽略未認(rèn)證的CA證書.
Request:類的相關(guān)參數(shù)
url 參數(shù)是請求鏈接,這個是必傳參數(shù),其他的都是可選參數(shù)。
data 參數(shù)跟 urlopen() 中的 data 參數(shù)用法相同。
headers 是一個字典。它除了在 Request 中添加,還可以通過調(diào)用 Reques t實例的 add_header() 方法來添加請求頭。
unverifiable 參數(shù)表示這個請求是否是無法驗證的,默認(rèn)值是False。意思就是說用戶沒有足夠權(quán)限來選擇接收這個請求的結(jié)果。例如我們請求一個HTML文檔中的圖片,但是我們沒有自動抓取圖像的權(quán)限,我們就要將 unverifiable 的值設(shè)置成 True。(這個參數(shù)我們不需要設(shè)置)
method 參數(shù)指的是發(fā)起的 HTTP 請求的方式
data(默認(rèn)空):是伴隨 url 提交的數(shù)據(jù)(比如要post的數(shù)據(jù)),同時 HTTP 請求將從 "GET"方式 改為 "POST"方式。
headers(默認(rèn)空):是一個字典,包含了需要發(fā)送的HTTP報頭的鍵值對。
請求頭:
用不同的瀏覽器在發(fā)送請求的時候,會有不同的User-Agent頭。 urllib默認(rèn)的User-Agent頭為:Python-urllib/x.y(x和y是Python主版本和次版本號,例如 Python-urllib/3.5)
Header:
HTTP Request 中加入特定的 Header,來構(gòu)造一個完整的HTTP請求消息。
可以通過調(diào)用Request.add_header() 添加/修改一個特定的header
也可以通過調(diào)用Request.get_header()來查看已有的header。
正則:
單字符匹配
. 除換行符之外的任意字符
\d 表示數(shù)字
\D 匹配非數(shù)字
\w 匹配單詞字符[a-z,A-Z,0-9]
\W 匹配非單詞字符
\s 匹配空白字符,空格,\n \t ...
\S 匹配非空白字符
^ 匹配以...開頭
$ 匹配以...結(jié)尾
[0-9] => \d 匹配0-9
多字符匹配(貪婪匹配)
- 匹配*前面的字符任意次數(shù)
- 匹配+前面的字符至少1次
? 匹配?前面的字符0~1次
{n,m} 匹配{n,m}前面的字符n~m次
多字符匹配(非貪婪匹配)
*?
+?
??
其他匹配
() 分組
| 邏輯或
\ 轉(zhuǎn)義字符