Spider-1

urllib

  • 包含模塊
    • urllib.request:打開和讀取urls
    • urllib.error:包含urllib.request產生的常見的錯誤,使用try捕捉
    • urllib.parse:包含解析url的方法
    • urllib.robotparse:解析robots.txt文件
  • 網頁編碼問題的解決
    • chardet 能夠自動檢測頁面文件的編碼格式,可是,可能有誤
import urllib
import chardet
if __name__ == '__main__':
    url = 'http://......'
    rsp = urllib.request.urlopen(url)
    html = rsp.read()
    # 利用chardet檢測
    cs = chardet.detect(html)
    print(cs)
    #使用get取值保證不會出錯
    html = html.decode(cs.get("encoding","utf-8"))
    print(html)
複製代碼
  • urlopen的返回對象
    • geturl:返回請求對象的url
    • info:請求返回對象的meta信息
    • getcode:返回http code(200.404.503...)
  • requeat.data 的使用
    • 訪問網絡的兩種方法
      • get:
        • 實際是利用參數給服務器傳遞信息
        • 參數爲dict,而後用parse編碼
      • post:
        • 通常向服務器傳遞參數使用
        • post是把信息自動加密處理
        • 咱們若是想使用post信息,須要用到data參數
        • 使用post,意味着HTTP的請求頭可能須要更改:
          • Content-Type:application/x-www.form-urlencode
          • Content-Length:數據長度
          • 簡而言之,一旦更改請求方法,請注意其餘請求頭部信息相適應
        • urllib.parse.urlencode能夠將字符串自動轉化成上面的格式
        • 爲了更多的設置請求信息,單純的經過urlopen函數已經不太好用了(請求頭)
        • 須要利用request.Request類
  • urllib.error
    • URLError產生的緣由:
      • 沒網
      • 服務器鏈接失敗
      • 找不着指定服務器
      • 是OSError的一個子類
    • HTTPError:是URLError的一個子類
    • 二者區別
      • HTTPError是對應HTTP請求的返回碼錯誤,若是返回碼是400以上的,則會引起HTTPError
      • URLError對應的通常是網絡出現問題,包括url問題
      • 關係區別:OSError->URLError->HTTPError

UserAgent

  • UserAgent:用戶代理,簡稱UA,屬於headers的一部分,服務器經過UA來判斷訪問者身份
  • 設置UA能夠經過兩種方式
    • headers
    • add_header

ProxyHangler處理(代理服務器)

  • 使用代理IP,是爬蟲經常使用手段
  • 獲取代理服務器的地址:
    • www.xicidaili.com
    • www.goubanjia.com
  • 代理用來隱藏真實訪問中,代理也不容許頻繁訪問某一個固定的網站,因此,代理必定要不少不少
  • 基本使用代理步驟:
    • 設置代理地址
    • 建立ProxyHandler
    • 建立Opener
    • 安裝Opener

cookie & session

  • 因爲http協議的無記憶性,人們爲了彌補這個缺點,所採用的的一個補充協議
  • cookie是發放給用戶(即http瀏覽器)的一段信息,session是保存在服務器上的對應的另外一半信息,用來記錄用戶信息
  • 區別:
    • 存放位置不一樣
    • cookie並不安全
    • session會保存在服務器上必定時間,會過時
    • 單個cookie保存數據不超過4k,不少瀏覽器限制一個站點最多保存20個
  • session的存放位置
    • 存在服務器站
    • 通常狀況下,session是放在內存或者數據庫裏中
    • 沒有cookie登陸,能夠看到,沒有使用cookie則反饋網頁爲未登陸狀態
  • 使用cookie登陸
    • 把cookie複製下來,放在請求頭(headers)
    • http模塊包含一關於cookie的模塊,經過他們咱們能夠自動使用cookie
      • CookieJar
        • 管理存儲cookie,向傳出的http請求添加cookie
        • cookie存儲在內存裏,CookieJar實例回收後cookie將消失
      • FileCookieJar(filename,delayload=None,policy=None):
        • 使用文件管理cookie
        • filname是保存cookie的文件
      • MozillaCookieJar(filename,delayload=None,policy=None):
        • 建立於Mozilla瀏覽器cookie.txt兼容的FileCookieJar
      • LwpCookieJar(filename,delayload=None,policy=None):
        • 建立於libwww-perl標準兼容的Set-Cookie3格式的FileCookieJar實例
      • 他們的關係是:CookieJar->FileCookieJar->MozillaCookieJar & LwpCookieJar
  • 自動使用cookie登陸的大體流程是:
    • 打開登陸頁面後自動經過用戶密碼登陸
    • 自動提取反饋回來的cookie
    • 利用提取的cookie登陸隱私頁面

SSL

  • SSL證書就是指遵照SSL安全套階層協議層的服務器數字證書
  • 有第三方公司發放
  • 遇到不信任的SSL證書,須要單獨處理

js加密

  • 有的反爬蟲策略須要js對須要傳輸的數據進行加密處理(一般是取md5值)
  • 通過加密,傳輸的就是密文,可是加密函數或者過程必定在瀏覽器完成的,也就是必定會把代碼(js代碼)暴露給使用者
  • 經過閱讀加密算法,就能夠模擬出加密過程,從而達到破解

ajax

  • 異步請求
  • 必定會有url,請求方法,可能有數據
  • 通常使用json格式
本站公眾號
   歡迎關注本站公眾號,獲取更多信息