【python爬蟲專題】解析方法 <1> Urllib庫方法總結,pythonurllib

來源:互聯網
上載者:User

【python爬蟲專題】解析方法 <1> Urllib庫方法總結,pythonurllib
什麼是Urllib: 一個python內建的HTTP請求庫主要包含四個模組:

urllib.request    請求模組: 用這個模組類比發送頁面請求
urllib.error    異常處理模組: 保證程式不會由於運行出錯而意外終止
urllib.parse    url解析模組: 作為頁面處理的工具模組使用
urllib.robotparser robots.txt解析模組,用於解析網站的robots檔案

urlopen

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

主要運用前三個參數,url,data(設定post請求的一些資料),timeout

Request

  在發送一些較為複雜的request請求的時候,比方說在request裡面加上設定了的headers的時候,可以使用Request方法。
  #注意:我們用這個方法設定的是Request請求,應配合urlopen方法使用Request方法設定好的request,返回的即response
  例如:
 

# request 的設定from urllib import request, parseurl = 'http://httpbin.org/post'headers = {    "User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",    "Host":"httpbin.org"}dict = {'name':"自訂"}data = bytes(parse.urlencode(dict),encoding='utf-8')req = request.Request(url=url,headers=headers,method='POST',data=data)response = request.urlopen(req)print(response.read().decode("utf-8"))
Handler

  在python的官方文檔中,關於Handler的介紹有很多種,這裡作為我入門的第一個學習的handler,主要是代理Handler(proxy-handler)
  使用代理,可以更換我們請求資源使用的IP,這樣在違規操作的時候萬一被ban了,也可以通過更換IP繼續運行,不過最好不要這樣幹,將心比心,經營網站的人也不容易(→_→)
  使用代理的方法比較簡單,記下這個套路:
  

import urllib.requesturl = "http://www.baidu.com"proxy_handler = urllib.request.ProxyHandler({        "http":'http://127.45.97.1:9743',        "https":'http://127.45.97.1:9743'}) #注意這個方法傳入的是字典格式opener = urllib.request.build_opener(proxy_handler)response = opener.open(url)print(response.read())
cookie(儲存在使用者本地終端上的資料)

  Cookie 是在 HTTP 協議下,伺服器或指令碼可以維護客戶工作站上資訊的一種方式。Cookie 是由 Web 服務器儲存在使用者瀏覽器(用戶端)上的小文字檔,它可以包含有關使用者的資訊。無論何時使用者連結到伺服器,Web 網站都可以訪問 Cookie 資訊
  在頁面中,最常見的cookies就是登入資訊,我們在製作爬蟲的時候可以利用cookies來保持登入資訊,以避免某些網站要求的登入驗證等。同理,如果自行刪除掉cookies,我們的登入狀態就會自動被退出。
  
下面用一段小代碼做個示範

# about cookiesimport http.cookiejar, urllib.requestcookie = http.cookiejar.CookieJar()handler = urllib.request.HTTPCookieProcessor(cookie) #this is also a handleropener = urllib.request.build_opener(handler)response = opener.open("http://www.baidu.com")for item in cookie:    print(item.name + " = " + item.value)

我們也可以把cookies儲存為txt檔案,不過使用的方法不同:
上述代碼中,cookies應該這樣聲明:
cookie = http.cookiejar.MozillaCookieJar(filename)
在最後應該調用cookie.save方法儲存此檔案。

同樣的,cookie也存在其他的格式,比方說最常見的LWP format,範例程式碼如下:

# cookie can also save in a 'LWP' formatimport http.cookiejar,urllib.request#儲存cookies到本地filename = 'cookies.txt'cookie = http.cookiejar.LWPCookieJar(filename)handler = urllib.request.HTTPCookieProcessor(cookie)opener = urllib.request.build_opener(handler)response = opener.open("http://www.baidu.com")cookie.save(ignore_discard=True,ignore_expires=True)#載入cookiescookie.load("cookies.txt",ignore_discard=True,ignore_expires=True)print(response.read().decode('utf-8'))

這樣,在訪問某些只能登入才能訪問的頁面時,就沒有問題了

異常處理

開啟python3 的官方文檔,我們查詢urllib.error的相關文檔,可以發現由urllib.request產生的error一共有三類:
URLError 、 HTTPError 和 ContentTooShortError,使用異常的方法屬於python基礎內容,不過多介紹。

from urllib import request,errorurl = '######'try:    response = request.urlopen(url)except error.HTTPError as e:    print(e.reason,e.code,e.headers,sep='\n')except error.URLError as e:    print(e.reason)else:    print("request successfully!")
url解析urlparse

urllib.parse.urlparse(urlstring, scheme=”, allow_fragments=True)
  url解析,顧名思義就是把url分解,分析為不同的幾個片段。輸入的urlstring沒有協議類型的時候,我們可以在函數中指定預設的協議scheme。
  allow_fragments=True 這個參數如果改為False,那麼urlstring中屬於fragment的部分就不會單獨分出來,會I懂得拼接給path,query等前面的部分。
  

urlunparse

相當於urlparse的反函數,輸入一個包含url各組成部分為內容的list,可以把他們組成一個完整的urlstring

urlencode

把一個字典對象轉換成一個get請求參數。get請求參數都是 “url?” + “參數1” & “參數2”……,我們可以用一個url 和一個包含參數的字典做拼接,最後得到一個完整的get請求
樣本:

from urllib.parse import urlencodeparams = {        'name' : 'vincent',        'age' : '19',        'occupation' : 'student'}base_url = 'http://www.baidu.com?'url = base_url + urlencode(params)print(url)

運行結果:

http://www.baidu.com?name=vincent&age=19&occupation=student
以上的方法用得比較多,注意常常複習! 著作權聲明:本文為博主原創文章,未經博主允許不得轉載。 http://blog.csdn.net/hiha_hero2333/article/details/79150848

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.