一 .爬蟲css
爬蟲,向網站發送請求,獲取資源後分析 並提取有用的數據 的程序html
爬蟲本質就是:本質就是cosplay,將爬蟲模擬成各類【USER_AGENT】瀏覽器,甚至還模擬成別人【ip代理】的瀏覽器。自動提取網頁的程序。python
二.流程web
#一、發起請求 使用http庫向目標站點發起請求,即發送一個Request Request包含:請求頭、請求體等 #二、獲取響應內容 若是服務器能正常響應,則會獲得一個Response Response包含:html,json,圖片,視頻等 #三、解析內容 解析html數據:正則表達式,第三方解析庫如Beautifulsoup,pyquery等 解析json數據:json模塊 解析二進制數據:以b的方式寫入文件 #四、保存數據 數據庫 文件
#Request:用戶將本身的信息經過瀏覽器(socket client)發送給服務器(socket server) #Response:服務器接收請求,分析用戶發來的請求信息,而後返回數據(返回的數據中可能包含其餘連接,如:圖片,js,css等) #ps:瀏覽器在接收Response後,會解析其內容來顯示給用戶,而爬蟲程序在模擬瀏覽器發送請求而後接收Response後,是要提取其中的有用數據。
#一、請求方式: 經常使用的請求方式:GET,POST 其餘請求方式:HEAD,PUT,DELETE,OPTHONS ps:用瀏覽器演示get與post的區別,(用登陸演示post) post與get請求最終都會拼接成這種形式:k1=xxx&k2=yyy&k4=zzz post請求的參數放在請求體內: 可用瀏覽器查看,存放於form data內 get請求的參數直接放在url後 #二、請求url url全稱統一資源定位符,如一個網頁文檔,一張圖片 一個視頻等均可以用url惟一來肯定 url編碼 https://www.baidu.com/s?wd=圖片 圖片會被編碼(看示例代碼) 網頁的加載過程是: 加載一個網頁,一般都是先加載document文檔, 在解析document文檔的時候,遇到連接,則針對超連接發起下載圖片的請求 #三、請求頭 User-agent:請求頭中若是沒有user-agent客戶端配置, 服務端可能將你當作一個非法用戶 host cookies:cookie用來保存登陸信息 通常作爬蟲都會加上請求頭 #四、請求體 若是是get方式,請求體沒有內容 若是是post方式,請求體是format data ps: 一、登陸窗口,文件上傳等,信息都會被附加到請求體內 二、登陸,輸入錯誤的用戶名密碼,而後提交,就能夠看到post,正確登陸後頁面一般會跳轉,沒法捕捉到post
from urllib.parse import urlencode import requests headers={ 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 'Cookie':'BIDUPSID=A477AA56C3F17BC59A75C1EC2457CE9D; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID=AD7BBA497F7F14FB30E8AA7E2BBAD53C:FG=1; PSTM=1510744992; BD_HOME=0; H_PS_PSSID=1420_21096_24880_20927; BD_UPN=12314753', 'Host':'www.baidu.com', 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3253.3 Safari/537.36' } # response=requests.get('https://www.baidu.com/s?'+urlencode({'wd':'啤酒'}),headers=headers) response = requests.get('https://www.baidu.com/s',params={'wd':'啤酒'},headers=headers) with open('e.html','w',encoding='utf8') as f: f.write(response.text) # print(response.text)
五 response正則表達式
#一、響應狀態 200:表明成功 301:表明跳轉 404:文件不存在 403:權限 502:服務器錯誤 #二、respone header set-cookie:可能有多個,是來告訴瀏覽器,把cookie保存下來 #三、preview就是網頁源代碼 最主要的部分,包含了請求資源的內容 如網頁html,圖片 二進制數據等
六.總結數據庫
#一、總結爬蟲流程: 爬取--->解析--->存儲 #二、爬蟲所需工具: 請求庫:requests,selenium 解析庫:正則,beautifulsoup,pyquery 存儲庫:文件,MySQL,Mongodb,Redis #三、爬蟲經常使用框架: scrapy
HTTP(hypertext transport protocol),即超文本傳輸協議。這個協議詳細規定了瀏覽器和萬維網服務器之間互相通訊的規則。json
HTTP就是一個通訊規則,通訊規則規定了客戶端發送給服務器的內容格式,也規定了服務器發送給客戶端的內容格式。其實咱們要學習的就是這個兩個格式!客戶端發送給服務器的格式叫「請求協議」;服務器發送給客戶端的格式叫「響應協議」。瀏覽器
特色:緩存
URL:統一資源定位符,就是一個網址:協議名://域名:端口/路徑,例如:http://www.baidu.com服務器
爬蟲爬取數據時必需要有一個目標的URL才能夠獲取數據,所以,它是爬蟲獲取數據的基本依據,準確理解它的含義對爬蟲學習有很大幫助。
響應頭對瀏覽器來講很重要,它說明了響應的真正含義。例如200表示響應成功了,302表示重定向,這說明瀏覽器須要再發一個新的請求。
當用戶第一次請求index.html時,服務器會添加一個名爲Last-Modified響應頭,這個頭說明了 index.html的最後修改時間,瀏覽器會把index.html內容,以及最後響應時間緩存下來。當用戶第 二次請求index.html時,在請求中包含一個名爲If-Modified-Since請求頭,它的值就是第一次請 求時服務器經過Last-Modified響應頭髮送給瀏覽器的值,即index.html最後的修改時間, If-Modified-Since請求頭就是在告訴服務器,我這裏瀏覽器緩存的index.html最後修改時間是這個, 您看看如今的index.html最後修改時間是否是這個,若是仍是,那麼您就不用再響應這個index.html 內容了,我會把緩存的內容直接顯示出來。而服務器端會獲取If-Modified-Since值,與index.html 的當前最後修改時間比對,若是相同,服務器會發響應碼304,表示index.html與瀏覽器上次緩存的相 同,無需再次發送,瀏覽器能夠顯示本身的緩存頁面,若是比對不一樣,那麼說明index.html已經作了修 改,服務器會響應200。
4.瀏覽網頁
瀏覽網頁的過程,用戶輸入網址以後,通過DNS服務器,找到服務器主機,向服務器發出一個請求,服務器通過解析,發動給用戶的瀏覽器HTML、JS、CSS 等文件,瀏覽器解析出來,用戶即可以看到形形色色的內容。
所以,用戶看到到的網頁實質是由HTML代碼構成的,爬蟲爬的即是這些內容,通過分析和過濾這些HTML代碼,實現對圖片,文字等資源的獲取。