pyhotn爬蟲篇---基礎瞭解

一 .爬蟲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後,是要提取其中的有用數據。

 

四 request

#一、請求方式:
    經常使用的請求方式: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

 

2.HTTP概述

HTTPhypertext transport protocol),即超文本傳輸協議。這個協議詳細規定了瀏覽器和萬維網服務器之間互相通訊的規則。json

HTTP就是一個通訊規則,通訊規則規定了客戶端發送給服務器的內容格式,也規定了服務器發送給客戶端的內容格式。其實咱們要學習的就是這個兩個格式!客戶端發送給服務器的格式叫請求協議;服務器發送給客戶端的格式叫響應協議瀏覽器

特色:緩存

  • HTTP叫超文本傳輸協議,基於請求/響應模式的!
  • HTTP是無狀態協議

URL:統一資源定位符,就是一個網址:協議名://域名:端口/路徑,例如:http://www.baidu.com服務器

 

  爬蟲爬取數據時必需要有一個目標的URL才能夠獲取數據,所以,它是爬蟲獲取數據的基本依據,準確理解它的含義對爬蟲學習有很大幫助。

 

 

3.狀態

響應頭對瀏覽器來講很重要,它說明了響應的真正含義。例如200表示響應成功了,302表示重定向,這說明瀏覽器須要再發一個新的請求。

  • 200:請求成功,瀏覽器會把響應體內容(一般是html)顯示在瀏覽器中;
  • 404:請求的資源沒有找到,說明客戶端錯誤的請求了不存在的資源;
  • 500:請求資源找到了,但服務器內部出現了錯誤;
  • 302:重定向,當響應碼爲302時,表示服務器要求瀏覽器從新再發一個請求,服務器會發送一個響應頭Location,它指定了新請求的URL地址;
  • 304
當用戶第一次請求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代碼,實現對圖片,文字等資源的獲取。

相關文章
相關標籤/搜索