1. 程式人生 > >Python爬蟲學習筆記(一)——urllib庫的使用

Python爬蟲學習筆記(一)——urllib庫的使用

scheme param https ade 網站 dmgr nor 分享圖片 out

前言

我買了崔慶才的《Python3網絡爬蟲開發實戰》,趁著短學期,準備系統地學習下網絡爬蟲。在學習這本書的同時,通過博客摘錄並總結知識點,同時也督促自己每日學習。本書第一章是開發環境的配置,介紹了爬蟲相關的各種庫以及如何安裝,這裏就跳過了。第二章是爬蟲基礎,都是些基本知識點,也跳過。從第三章開始認真記錄學習路徑。

urllib庫的使用

urllib庫是python內置的HTTP請求庫,包含四個模塊,接下來我將分別記錄四大模塊的功能和應用

request模塊

它是最基本的HTTP請求模塊,可以用來模擬發送請求
一、urlopen()方法
這個方法可以發起最基本的請求,同時帶有處理授權驗證、重定向、瀏覽器Cookies等內容的功能。

關於返回的對象,可以先看看下面的代碼。

import urllib.request

response = urllib.request.urlopen("http://www.python.org")
print(response.status)
print(response.getheaders())
print(response.read())

上面代碼中的response是一個HTTPResponse類型的對象,主要包含read()、readinto()、getheader(name)、getheaders()、fileno()等方法,以及msg、version、status、reason、debuglevel、closed等屬性。基本上如同字面能理解方法和屬性的含義,其中常用的幾個再提一下。read()方法可以得到返回的網頁內容,status屬性可以得到狀態碼。

此外,urlopen()方法還可以傳遞一些參數,如下
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

二、Request()方法
Request可以說是對urlopen的補充,可以在請求中添加Headers等信息。基本用法如下:

import urllib.request

request = urllib.request.Request('http://python.org')
response = urllib.request.urlopen(request)
print(response.read().decode('utf-8'))

接下來看看Request可以傳遞怎樣的參數
urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
其中origin_req_host參數指的是請求方的host名稱或者IP地址,method參數指的是請求使用的方法(GET、POST、PUT等)

三、高級用法
Handler類的一些常用子類有下面幾個:
1、HTTPDefaultErrorHandler:處理HTTP響應錯誤
2、HTTPRedirectHandler:處理重定向
3、HTTPCookieProcessor:處理Cookies
4、ProxyHandler:設置代理
5、HTTPPasswordMgr:管理密碼
6、HTTPBasicAuthHandler:管理認證
$ 驗證 $
驗證用戶名和密碼是爬蟲經常面對的,這裏貼上部分驗證代碼

p = HTTPPasswordMgrWithDefaultRealm()
p.add_password(None, url, username, password)
auth_handler = HTTPBasicAuthHandler(p)
opener = build_opener(auth_handler)
result = opener.open(url)
html = result.read().decode('utf-8')
print(html)

$ 代理 $

proxy_handler = ProxyHandler({
    'http': http_url,
    'https': https_url
})
opener = build_opener(proxy_handler)

$ Cookies $
獲取Cookies

import http.cookiejar, urllib.request

cookie = http.cookiejar.CookieJar()
cookie = http.cookiejar.LWPCookieJar()
# 以上兩個二選一
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open(url)
cookie.save(ignore_discard=True, ignore_expires=True)

讀取本地Cookies

cookies = http.cookiejar.LWPCookieJar()
cookie.load(filename, ignore_discard=True, ignore_expires=True)

error模塊

error模塊定義了由request模塊產生的異常,暫時用的不多,所以我只是粗略看了一下。
1、URLError類
2、HTTPError類

parse模塊

這個模塊主要用來解析鏈接
1、urlparse()/urlunparse():URL的識別和分段及其對立方法
標準鏈接格式:scheme://netloc/path;params?query#fragment
2、urlsplit()/urlunsplit():類似上一個,區別是不單獨解析params這部分
3、urljoin():鏈接的解析、拼合與合成
4、urlencode():將字典類型序列化為URL參數
5、parse_qs()/parse_qsl():將參數轉化為字典/元組組成的列表
6、quote()/unquote():將內容轉化為URL編碼的格式及其對立方法

robotparser模塊

分析網站的Robots協議,略

思維導圖

技術分享圖片

Python爬蟲學習筆記(一)——urllib庫的使用