Python3網絡爬蟲開發實踐讀書筆記 --- 第三章 基本庫的使用

這一系列文章是我在閱讀「Python3網絡爬蟲開發實踐」一書以及其餘線上資料學習爬蟲過程當中的一些筆記和心得,但願能分享給你們。html

章節概述:本章介紹爬蟲依賴的幾個基本庫的使用方法正則表達式

章節結構cookie

  • Urllib
  • Requests
  • 正則表達式

具體內容網絡

  • Urllib

Urllib庫主要負責發送HTTP請求部分,主要包含四個模塊:
request: 模擬發送請求模塊
error:異常處理模塊
parse:工具模塊,提供處理URL的方法(拆分,解析,合併等)
robotparser:識別網站robots.txt文件,判斷哪些網站能夠爬取
1.request 發送請求
1.1 urllib.request.urlopen()
這個函數主要做用是返回一個http.client.HTTPResponse類型的對象,這個對象有read(),readinto(),getheader(name),getheaders(),fileno()等方法,還有msg,version, status, reason, debuglevel, closed等屬性。咱們能夠經過這些方法和屬性得到結果的一系列信息。
這個函數支持的參數以下:
urllib.request.`urlopen`(_url_,_data=None_,[timeout_,]*_,_cafile=None_,_capath=None_,_cadefault=False_,_context=None_)
data:在發送POST請求時能夠添加這個參數來模擬POST請求的參數,可是這個參數須要實現轉碼爲byte字節流類型,好比data = bytes(urllib.parse.urlencode({'id':'test'}),encoding='utf8')
timeout:設置超時時間,單位爲秒,若是超出該時間還沒獲得響應就會拋出異常urllib.error.URLError,這個error的reason屬性是socket.timeout
context:ssl.SSLContext類型,用於指定SSL設置
1.2 urllib.request.Request
urlopen只是進行很很簡單的請求,若是請求須要更完善,好比加入Header,須要用到Request。使用方法能夠是用urllib.request.Request建立一個Request對象,而後把這個對象傳入urlopen做爲參數。
Request API: class urllib.request.`Request`(_url_,_data=None_,_headers={}_,_origin_req_host=None_,_unverifiable=False_,_method=None_)
url:惟一一個必傳參數,網頁url
header:字典類型參數,模擬請求頭,能夠經過這個參數賦值,也能夠經過add_header()方法添加
origin_req_host:指的是請求方的host名稱或者IP地址
unverifiable:表示請求是否沒法驗證,即用戶沒有足夠權限來選擇接收這個請求的結果
method:GET/POST/PUT等
1.3 高級操做,好比cookie,代理等 --- Handler處理器 + Opener
1.3.1 urllib.request.`BaseHandler`:全部Handler的父類,提供了基本的方法
1.3.2 經常使用Handler
HTTPDefaultErrorHandler:處理HTTP響應錯誤
HTTPRedirectHandler:處理重定向
HTTPCookieProcessor:處理Cookie
ProxyHandler: 處理代理
HTTPPasswordMgr: 處理密碼管理
HTTPBasicAuthHandler: 處理認證管理
1.3.3 經過Handler建立Opener:
須要用戶名密碼驗證的網站
用HTTPPasswordMgrWithDefaultRealm對象的add_password方法添加用戶名密碼對,而後用這個對象爲參數建立一個HTTPBasicAuthHandler,而後用urllib.request.`build_opener`([handler_,_...])建立opener,而後調用opener對象的open方法請求網頁
須要代理的網站
ProxyHandler + opener
須要Cookie處理
http.cookiejar.CookerJar() + HTTPCookieProcessor + opener
Cookie文件保存
(1) http.cookiejar.MazillaCookieJar(filename) + HTTPCookieProcessor
(2) http.cookiejar.LWPCookierJar(filename)+ HTTPCookieProcessor
Cookie文件使用
http.cookiejar.LWPCookierJar()對象的load方法socket

2.Error 處理異常
2.1 urllib.error.`URLError`
由request模塊產生的異常,都由URLError模塊捕獲。
2.2 urllib.error.`HTTPError`是URLError的子類,用於處理HTTP請求錯誤,有三個屬性code(狀態碼),reason(錯誤緣由),header(返回請求頭)
2.3 Except捕捉順序應該是先HTTPError,再URLError函數

3.Parse 解析連接
3.1.urllib.parse.`urlparse`(_urlstring_,_scheme=''_,_allow_fragments=True_):用於URL的識別和分段,返回urllib.parse。ParseResult類型。內容有ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html',
params='', query='', fragment='')
scheme: ://以前的內容
netloc:第一個問號前的內容,表示網頁域名
path:是訪問路徑
params:參數
query:問號後的查詢條件
這些結果也能夠經過index來獲取,由於ParseResult自己是一個元組
3.2 urlparse傳入參數有urlstring(必填,帶解析URL),scheme是默認協議,allow_fragment表示是否忽略fragment,即#後的錨點位置
3.3 urlunparse:構造URL
3.4 urlsplit:相似urlparse,除了parms會合併入path部分,返回SplitResult元組對象
3.5 urljoin:合併連接,第一個參數爲base_url,第二個參數是新的連接,並且若是兩個連接scheme,netloc,path三部分重複,會默認用新連接的
3.6 urlencode:構造GET方法請求參數時能夠將字典序列化爲請求的參數
3.7 parse_qs: urlencode的反序列化,將參數轉換爲字典
3.8 parse_qsl:將參數轉換爲元組列表
3.9 quote:將內容轉換爲URL編碼格式,好比有中文的時候避免亂碼
3.10 unquote:進行URL解碼
4.Robots協議,urllib.robotparser
4.1 Robots協議:爬蟲協議或者機器人協議。全名是網絡爬蟲排除協議Robots Exclusion Protocol。告訴爬蟲和搜索引擎哪些頁面能夠抓取,哪些不能夠。一般是一個存在網站根目錄下的robots.txt文本文件
4.2 robotparser模塊:負責解析robots.txt,利用模塊中的RobotFileParser類來判斷一個爬蟲是否有權限爬取這個網頁
4.3 經常使用方法
4.3.1 set_url:設置robots.txt路徑
4.3.2 read:讀取robots.txt文件
4.3.3 parse:解析robots.txt文件
4.3.4 can_fetch:檢測一個URL是否能夠被一個搜索引擎抓取
4.3.5 mtime:返回上次抓取和分析robots.txt的時間
4.3.6 modified:將當前時間設置爲上次抓取和分析robots.txt的時間工具

  • Requests

1.基本用法
requests.get()與urlopen相同,獲得一個Response對象(requests.models.Response),同時還有POST,PUT等其餘方法。
2.高級用法
requests.post()能夠:
傳入file(上傳文件)
添加header(請求頭中能夠添加Cookie)
增長verify參數跳過SSL驗證或者傳入cert參數,指定本地驗證證書
配置proxies參數傳入代理參數
添加timeout參數設置超時參數
添加auth參數,好比用戶名密碼post

  • 正則表達式

正則表達式用於處理字符串,有本身特定的語法結構,能夠實現字符串的檢索,替換,匹配驗證
1.經常使用規則
正則經常使用.png
2.匹配方法match()檢測一個字符串是否符合正則表達式,匹配過程當中能夠經過用括號括起想提取的部分。也能夠加入來表示模糊匹配。匹配還包括貪婪和非貪婪匹配,非貪婪用?代替*,表示儘量少匹配字符。
3.修飾符,控制匹配模式
Decorator.png
4.search()匹配,match方法若是開頭不符合就直接斷定失敗,search是用於檢測是否某個字符符合
5.findall,是在search基礎上返回所有符合部分
6.sub用於保留符合部分來達到修改字符串的功能
7.compile用於把字符串編譯成正則表達式對象學習

相關文章
相關標籤/搜索