天天看點

Python爬蟲入門:使用urllib子產品擷取請求頁面資訊

  歡迎來到拖更王的小部落格,天天想着要把學習和工作中遇到的内容釋出到空間,但是因為忙總是忘(這個借口真好)。以後還應該會堅持什麼時候想起來什麼時候更新的好習慣吧。

  今天說一下python爬蟲中一個常用的子產品urllib,urllib和requests一樣都是用來發起頁面請求進行擷取頁面資訊的子產品,但是不同的是requests要比urllib更強大,用起來更友善,requests屬于第三方子產品,需要單獨安裝,而urllib屬于内置子產品,可以直接導入使用,下面就使用urllib寫兩個小的案例進行實際示範,建議新手也跟着操作一下。一個是擷取頁面資訊,一個是使用cookie登入人人網登入。

# 導入urllib子產品,想用哪種方式自己選擇
# import urllib.request
from urllib import request

# 目标網址
url = 'http://www.baidu.com'

# 發起請求
response = request.urlopen(url)
# 使用第一種導入子產品的方式如下
# response = urllib.request.urlopen(url)

# 直接列印response的話隻能得到一個HTTPResposne類型的對象
# print(response)
# 是以需要使用read()方法解析擷取頁面,最後并轉碼為utf-8
html = response.read().decode('utf-8')

# 列印擷取頁面
print(html)
           

  部分網站有簡單的反爬措施,比如需要加上headers資訊,如User-Agent、Cookie等,添加上即可。

  此時再多加上一行建立請求對象的代碼即可。如下:

# 在解析頁面時,部分網站需要添加請求頭資訊來跳過基本的反爬措施,可以使用Request建構帶有請求頭的對象
resobj = request.Request(url,headers=headers)
           
from urllib import request, parse

# 使用cookiejar擷取cookie
from http import cookiejar

# 構造cookie_bag儲存對象
cookie_bag = cookiejar.CookieJar()
# 請求頁面時将擷取的cookie存入cookie_bag中
handler = request.HTTPCookieProcessor(cookie_bag)
# 在相應頁面時處理cookie的時候使用handler内部中的build_opener建立一個opener對象,用來存儲cookie對象
opener = request.build_opener(handler)
# url建議從network進行複制選擇
url = 'http://www.renren.com/ajaxLogin/login?'
# form可以F12檢視從network中檢視一下登入的Form Data,如沒有登入一下進行重新整理,并勾選Preserve log
form = {
    'email':'[email protected]',
    'icode':'',
    'origURL:http':'//www.renren.com/home',
    'domain':'renren.com',
    'key_id':'1',
    'captcha_type':'web_login',
    'password':'xxxxx',
    'rkey':'cb15f985754fd884a44506ff5db1256e',
    'f':'',
}

form = parse.urlencode(form).encode('utf-8')

response = opener.open(url, form)

res = response.read()

print(res)
           

繼續閱讀