什么是爬蟲?
就是一段自動抓取互聯(lián)網(wǎng)數(shù)據(jù)的程序或腳本
網(wǎng)頁的三大特性
1.每個網(wǎng)頁都有自己唯一的URL地址(統(tǒng)一資源定位符)
2.網(wǎng)頁都是通過HTML(超文本)展示數(shù)據(jù)的
3.網(wǎng)頁是通過HTTP/HTTPS(超文本傳輸協(xié)議)來傳輸HTML的
爬蟲最基本的步驟
1.尋找目標(biāo)URL地址,發(fā)起請求
2.獲取請求響應(yīng)結(jié)果,分析相應(yīng)結(jié)果
3.從響應(yīng)結(jié)果中提取數(shù)據(jù)a.第一部分,從網(wǎng)頁中提取的目標(biāo)數(shù)據(jù)
b. 如果存在新的URL地址,則提取,繼續(xù)發(fā)起請求
爬蟲結(jié)束:所有的目標(biāo)URL全部請求完畢,則爬蟲結(jié)束
爬蟲的分類
- 通用爬蟲,聚焦爬蟲
七層協(xié)議
應(yīng)用層 表示層 會話層 傳輸層 網(wǎng)絡(luò)層 數(shù)據(jù)鏈路層 物理層
應(yīng)用層:http/https
傳輸層:TCP/UDP
TCP:網(wǎng)絡(luò)傳輸協(xié)議,面向連接的,長連接,傳輸?shù)氖菙?shù)據(jù)流
,確保數(shù)據(jù)的安全性和完整性,但是數(shù)據(jù)傳輸?shù)男实?br>
UDP:網(wǎng)絡(luò)傳輸協(xié)議,是非面向連接的,短連接,傳輸?shù)氖菙?shù)據(jù)包,
傳輸數(shù)據(jù)是不安全的,可能會造成數(shù)據(jù)的丟失,傳輸速度非常快
http(超文本傳輸協(xié)議,端口號是80)
實現(xiàn)從網(wǎng)絡(luò)傳輸草文本數(shù)據(jù)到本地瀏覽器的傳送協(xié)議
https(端口號是443):是http的安全版本,在http的基礎(chǔ)上添加了一個SSL(安全套階層),用于WEB端的安全傳送,在傳輸層對網(wǎng)絡(luò)進(jìn)行加密
1.構(gòu)建了一個安全的數(shù)據(jù)傳輸通道
2.保證網(wǎng)站的真實性和有效性
常見的請求狀態(tài)碼:
200:請求成功
3xx:重定向 |301永久重定向|302臨時重定向
4xx:客戶端請求錯誤|400請求錯誤,服務(wù)器無法解析|401未授權(quán),沒有進(jìn)行身份驗證|403服務(wù)器拒絕訪問|404訪問的頁面不存在|405請求方式不允許|408請求超時
5xx:服務(wù)器出現(xiàn)錯誤|500服務(wù)器內(nèi)部錯誤|501服務(wù)器暫時不具備完成請求功能|503服務(wù)器不可用
URL介紹
- URI:統(tǒng)一資源標(biāo)志符
- URN:統(tǒng)一資源名稱
- URL:統(tǒng)一資源定位符
- URI是URN和URL的父類
scheme:指的是協(xié)議(https/http)
host:值得是服務(wù)器的ip或者域名
port:指的是端口號
path:資源路徑
query_string:url地址后面的查詢參數(shù)
anchor(錨點):可以指定要跳轉(zhuǎn)的位置
parse
parse:可以對url進(jìn)行拆分,組合,編碼,解碼,拼接
parse.urlencode():將字典類型的參數(shù)轉(zhuǎn)為url編碼格式
get請求直接使用urlencode將參數(shù)轉(zhuǎn)為url編碼格式
post請求urlencode將參數(shù)轉(zhuǎn)為url編碼格式,然后用encode方法將字符串轉(zhuǎn)為bytes類型
parse.parse_qs():將url編碼格式轉(zhuǎn)化為字典類型
parse.quote():將中文符轉(zhuǎn)為url編碼
parse.unquote():將url編碼的字符轉(zhuǎn)為中文字符
parse.urljoin():將不完整的url參照基類url拼接完整
parse.urlparse():解析url,將url拆分
error
error:在我們請求過程中,可能因為服務(wù)器錯,弱網(wǎng)環(huán)境造成請求失敗,這時我們需要對這些錯誤進(jìn)行處理,不然會造成代碼崩潰
error.URLError:
原因:沒網(wǎng)絡(luò)連接
服務(wù)器連接失敗
找不到指定的服務(wù)器
有一個reason屬性:返回錯誤原因
error.HTTPError:
HTTP請求錯誤
code:請求狀態(tài)碼
reason:返回錯誤原因
headers:返回響應(yīng)頭部
正則
單個字符
| 字符 | 功能 |
|---|---|
| . | 匹配任意1個字符(除了\n) |
| [ ] | 匹配[ ]中列舉的字符 |
| \d | 匹配數(shù)字,即0-9 |
| \D | 匹配非數(shù)字,即不是數(shù)字 |
| \s | 匹配空白,即 空格,tab鍵 |
| \S | 匹配非空白 |
| \w | 匹配單詞字符,即a-z、A-Z、0-9、_ |
| \W | 匹配非單詞字符 |
多個字符
| 字符 | 功能 |
|---|---|
| * | 匹配前一個字符出現(xiàn)0次或者無限次,即可有可無 |
| + | 匹配前一個字符出現(xiàn)1次或者無限次,即至少有1次 |
| ? | 匹配前一個字符出現(xiàn)1次或者0次,即要么有1次,要么沒有 |
| {m} | 匹配前一個字符出現(xiàn)m次 |
| {m,n} | 匹配前一個字符出現(xiàn)從m到n次 |
| ^ | 開頭 |
| $ | 結(jié)尾 |
多字符匹配(非貪婪模式)
(*?)(+?)(??)