py爬蟲(chóng)基礎(chǔ)【待續(xù)】

前言

從二三月開(kāi)始自學(xué)Python開(kāi)始,到后來(lái)被傻叉項(xiàng)目折騰了半年多的時(shí)間,一直停滯了這么久,現(xiàn)在重新整理一些爬蟲(chóng)的資料,比較散碎,單純的是從開(kāi)發(fā)馬上上手的角度記錄的,這些基礎(chǔ)知識(shí)絕大多數(shù)是通過(guò)學(xué)習(xí)崔慶才老師的精品博客進(jìn)行的摘要,原版還是要看崔老師的博客,再次感謝崔老師無(wú)私奉獻(xiàn)的資料??????

urllib2【171107】

基本使用

  • 導(dǎo)包
    import urllib2
  • openUrl 看下定義
    • 唯一必填的是url
    • data 用于傳參數(shù)
    • timeout超時(shí)時(shí)間
    • 返回值是 響應(yīng)實(shí)體 response
    • 通過(guò) response.read 獲取響應(yīng)體信息
def urlopen(url,
            data=None,
            timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
            cafile=None,
            capath=None,
            cadefault=False,
            context=None):
  • 代碼
def open_url():
    url = ""file:///Users/user/Documents/myGit/react-demos/demo01/index.html""
    response = urllib2.urlopen(url)
    print response.read()
  • 執(zhí)行結(jié)果
    我的鏈接指向的是本地的一個(gè)HTML
    執(zhí)行結(jié)果

帶參數(shù)訪問(wèn) GET & POST 訪問(wèn)

  • 前文所敘,將參數(shù)直接或者間接放在data 中,data為字典類(lèi)型

  • GET 訪問(wèn)

    • 參數(shù)需要格式化一下,需要庫(kù)`import urllib
    • get 訪問(wèn)其實(shí)就是把處理后參數(shù)拼接成一個(gè)url字符串
    • 例子
# GET 獲取
def open_with_get():
    url0 = "http://client.hs.vread.com/operation/getQuestionList.json?"

    # 參數(shù),字典類(lèi)型
    params = {"page": 1, "page_size": 10}

    # 參數(shù)格式化
    data = urllib.urlencode(params)
    url = url0 + data
    request = urllib2.Request(url)
    response = urllib2.urlopen(request)
    print response.read()
  • POST 訪問(wèn)
    • 和 get 不同的是,參數(shù)不能直接拼接在鏈接中,要寫(xiě)在字典中,
    • 手頭沒(méi)有合適的post 例子,將上面get的例子改為post ,不能執(zhí)行,只是看一下格式
    • 例子
# Post 獲取
def open_with_post():
    url = "http://client.hs.vread.com/operation/getQuestionList.json"

    # 參數(shù),字典類(lèi)型
    params = {"page": 1, "page_size": 10}

    # 參數(shù)格式化
    data = urllib.urlencode(params)
    
    request = urllib2.Request(url, data)
    
    response = urllib2.urlopen(request)
    
    print response.read() 

urllib2 的高級(jí)用法

HTTP 請(qǐng)求頭參數(shù)

  • User-Agent : 有些服務(wù)器或 Proxy 會(huì)通過(guò)該值來(lái)判斷是否是瀏覽器發(fā)出的請(qǐng)求
  • Content-Type : 在使用 REST 接口時(shí),服務(wù)器會(huì)檢查該值,用來(lái)確定 HTTP Body 中的內(nèi)容該怎樣解析。
    • application/xml : 在 XML RPC,如 RESTful/SOAP 調(diào)用時(shí)使用
    • application/json : 在 JSON RPC 調(diào)用時(shí)使用
    • application/x-www-form-urlencoded : 瀏覽器提交 Web 表單時(shí)使用
      在使用服務(wù)器提供的 RESTful 或 SOAP 服務(wù)時(shí), Content-Type 設(shè)置錯(cuò)誤會(huì)導(dǎo)致服務(wù)器拒絕服務(wù)

在某些爬蟲(chóng)操作中,需要對(duì)請(qǐng)求頭中個(gè)別值進(jìn)行設(shè)定,具體的操作是

  • header 用一個(gè)字典進(jìn)行接收,
  • 需要進(jìn)行拼接的字段作為key,值用字符串
  • 拼接好的header 作為參數(shù),再構(gòu)建Request的時(shí)候傳入
  • 示例代碼
url = 'http://www.server.com/login'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'  
values = {'username' : 'cqc',  'password' : 'XXXX' }  
headers = { 'User-Agent' : user_agent }  
data = urllib.urlencode(values)  
request = urllib2.Request(url, data, headers)  
response = urllib2.urlopen(request)  
page = response.read() 

獲取cookie

opener

  • 定義: urllib2.OpenerDirector的實(shí)例
  • 當(dāng)通過(guò)url訪問(wèn)資源的時(shí)候,就是通過(guò)opener
  • 前面 urllib2.urlopen 就是使用默認(rèn)的opener
    • 它是一個(gè)特殊的opener,
    • 可以理解成opener的一個(gè)特殊實(shí)例,傳入的參數(shù)僅僅是url,data,timeout。

獲取cookie

  • 導(dǎo)包 import cookielib
  • 通過(guò)cookielib.CookieJar()創(chuàng)建cookie實(shí)例,用于存放cookie
    • 如果此cookie是可以由文件進(jìn)行讀取和存儲(chǔ)到文件的,則使用cookielib.MozillaCookieJar(文件路徑)
    • 存儲(chǔ)的時(shí)候需要傳參,參數(shù)為路徑
  • 通過(guò) urllib2.HTTPCookieProcessor(cookie實(shí)例) 創(chuàng)建 cookie處理器,參數(shù)為cookie實(shí)例
  • 通過(guò)urllib2.build_opener(cookie處理器)創(chuàng)建opener,參數(shù)為cookie處理器
  • 例子
# 獲取cookie
def get_cookie():

    # 聲明一個(gè)cookieJar來(lái)存放cookie
    cookie = cookielib.CookieJar()

    # 創(chuàng)建一個(gè)cookie處理器
    handler = urllib2.HTTPCookieProcessor(cookie)

    # 通過(guò)處理器來(lái)創(chuàng)建opener
    opener = urllib2.build_opener(handler)

    response = opener.open("https://www.zhihu.com")

    for item in cookie:
        print 'Name = ' + item.name
        print 'Value = ' + item.value

存儲(chǔ) 讀取cookie

  • 調(diào)用cookie實(shí)例的save方法存儲(chǔ)
    • 參數(shù)1:gnore_discard的意思是即使cookies將被丟棄也將它保存下來(lái)
    • 參數(shù)2: ignore_expires的意思是如果在該文件中cookies已經(jīng)存在
  • 調(diào)用cookie實(shí)例的load 方法讀取
    • 參數(shù)0:cookie文件的全路徑
    • 參數(shù)1:gnore_discard的意思是即使cookies將被丟棄也將它保存下來(lái)
    • 參數(shù)2: ignore_expires的意思是如果在該文件中cookies
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,597評(píng)論 19 139
  • 一、網(wǎng)絡(luò)爬蟲(chóng)的定義 網(wǎng)絡(luò)爬蟲(chóng),即Web Spider,是一個(gè)很形象的名字。把互聯(lián)網(wǎng)比喻成一個(gè)蜘蛛網(wǎng),那么Spide...
    隨風(fēng)化作雨閱讀 1,279評(píng)論 0 0
  • 本文將介紹handler處理器和自定義opener,更多內(nèi)容請(qǐng)參考:python學(xué)習(xí)指南 opener和handl...
    小七奇奇閱讀 969評(píng)論 0 1
  • 一、概述 urllib2是Python的一個(gè)針對(duì)URLs的庫(kù)。他以u(píng)rlopen函數(shù)的形式提供了一個(gè)非常簡(jiǎn)單的...
    MiracleJQ閱讀 1,560評(píng)論 0 5
  • urllib2是Python的一個(gè)獲取URLs的組件。他以u(píng)rlopen函數(shù)的形式提供了一個(gè)非常簡(jiǎn)單的接口,具有利...
    查無(wú)此人asdasd閱讀 1,626評(píng)論 0 3

友情鏈接更多精彩內(nèi)容