目錄html
網絡爬蟲的流程:python
獲取網頁:獲取網頁就是給一個網頁發送請求,該網頁會返回整個網頁的數據,相似在瀏覽器中鍵入網站而且按回車鍵,而後就能夠看到網站的整個內容。正則表達式
解析網頁(提取所須要的信息):就是從整個網頁的數據中提取想要的數據,相似在瀏覽去中看到網站的整個網頁,可是你須要提取你須要的信息sql
存儲信息:通常能夠存儲在csv或者數據庫中。數據庫
網絡爬蟲的技術實現:json
掌握定向網絡數據爬取和網頁解析的基本能力瀏覽器
將網站當成API服務器
自動爬取html頁面,自動網絡請求提交網絡
最優秀的爬蟲庫多線程
方法 | 說明 |
---|---|
requests.request() | 構造一個請求,支撐如下各方法的基礎方法 |
requests.get() | 獲取HTML網頁的主要方法,對應HTTP的GET |
requests.head() | 獲取HTML網頁頭信息的方法,對應於HTTP的HEAD |
request.post() | 向HTML網頁提交POST請求的方法,對應於HTTP的POST |
request.put() | 向HTML網頁提交PUT請求的方法,對應於HTTP的PUT |
request.patch() | 向HTML網頁提交局部修改請求,對應HTTP的PATCH |
requests.delete() | 向THTML網頁提交刪除請求,對應HTTP的DELETE |
Requests庫的2的重要對象
r = requests.get(url)
Response(包含了爬蟲返回的全部內容)
Response對象的屬性 | 說明 |
---|---|
r.status_code | HTTP請求的返回狀態,200表示連接成功,404表示失敗(通常來講除了200,其他都是失敗的) |
r.text | HTTP響應內容的字符串形式,即,url對應的頁面內容 |
r.encoding | 從HTTPheader中猜想的響應內容編碼方式 |
r.apparent_encoding | 從內容中分析出響應內容的編碼方式(備選編碼方式) |
r.content | HTTP響應內容的二進制形式(主要是用於圖片等) |
Request
r.status_code 狀態碼,若是爲200,證實能爬蟲成功,其他失敗
r.headers 返回get請求得到頁面的頭部信息
若是r.header中不存在charset,能夠認爲編碼方式維ISO-8859-1(這個能夠經過r.encoding得到)
若是出現亂碼,能夠用r.apparent_encoding得到備用編碼,而後用r.encoding = '得到的編碼',也能夠直接嘗試r.encoding = 'utf-8'
Requests異常
異常 | 說明 |
---|---|
r.raise_for_status() | 若是不是200,產生異常requests.HTTPError |
#檢測代碼是否能夠爬取 import requests def getHTMLTEXT(url): try: r = requests.get(url,timeout = 30) r.raise_for_status() #若是狀態碼不是200,會出錯 r.encoding = r.apparent_encoding return r.text # 獲取頭部 except Exception as e: return e if __name__ == '__main__': url = "http://baidu.com" print(getHTMLTEXT(url))
HTTP,Hypertext Transfer Protocol 超文本傳輸協議
HTTP是一個基於"請求與響應"模式的,無狀態的應用層協議
HTTP協議採用URL做爲定位網絡資源的標識。
URL格式:http://host[:post]\[path]
URL是經過HTTP協議存取資源的Internet路徑,一個URL對應一個數據資源。
host:合法的Internet主機域名或者IP地址
port:端口號,缺省端口爲80(默認爲80)
path:請求資源的路徑
HTTP協議對資源的操做
網絡連接有風險,異常處理很重要:
#檢測代碼是否能夠爬取 import requests def getHTMLTEXT(url): try: r = requests.get(url,timeout = 30) r.raise_for_status() #若是狀態碼不是200,會出錯 r.encoding = r.apparent_encoding return r.text # 獲取頭部 except Exception as e: return e if __name__ == '__main__': url = "http://baidu.com" print(getHTMLTEXT(url))
Robits Exclusion Standard網絡爬蟲排除標準
做用:網站告知網絡爬蟲那些頁面能夠爬取,那些不行。
形式:在網站根目錄下的robots.txt文件
百度的robots協議: https://www.baidu.com/robots.txt
# 例子: User-agent: Baiduspider #(百度爬蟲引擎)容許那些用戶爬取 Allow: /article #容許訪問/article.html、/article/12345.com Disallow: /baidu # 不容許爬取的內容 Disallow: /s? # 不容許爬取的內容 Disallow: /ulink? # 不容許爬取的內容 Disallow: /link? # 不容許爬取的內容 Disallow: /home/news/data/ # 不容許爬取的內容 Disallow: / # 禁止爬取除了Allow規定頁面以外的其餘任何界面。
以Allow開頭URL 連接的是能夠進行爬取的內容,以Disallow開頭的連接是不容許訪問爬取的。
若是沒有robots.txt文件,那麼就能夠爬取全部的內容。
解析Html頁面
提取相關信息
BeautifulSoup
基本元素內容
國際公認的信息標記種類有三種,分別是xml,json,yaml
xml 擴展標記語言
json對面向對象的一種表達形式 鍵值對有類型
yaml 無類型鍵值對錶達形式
通常來講yaml最容易讀,yaml的信息
#正則表達式 #一種通用的字符串表達框架 #簡潔表達的一組字符串的表達式 #針對字符串表達的「簡潔」和「特徵」的是思想
#做用: #表達文本類型的特徵 #同時查找或者替換一組字符串 #匹配字符串的所有或者部分區域
#正則表達式的使用 #編譯:將符合正則表達式語法的字符串轉化成正則表達式特徵