python爬蟲03:那個叫做Urllib的庫讓我們的python假裝是瀏覽器
相信你已經摸清了
瀏覽器各種請求的套路
也知道了怎麼在手機上進行請求和返回資料的抓取
那麼接下來我們就開始來使用 python 了
程式碼 lu 起來
image
那麼
怎麼用 python 寫各種請求呢?
今天要給大家介紹的就是
Urllib
這可是 python 內建的庫
有了它
我們寫程式碼就輕鬆了
腰也不疼了
腿也不酸了
頭髮也不禿了

image
那麼怎麼使用 **Urllib **呢?
恩
接下來
就是
學習 python 的正確姿勢

image
在 Python 這個內建的 Urllib 庫中
有這麼 4 個模組
request
request模組是我們用的比較多的
就是用它來發起請求
所以我們重點說說這個模組
error
error模組呢,就是當我們在使用 request 模組遇到錯了
就可以用它來進行異常處理
parse
parse模組就是用來解析我們的 URL 地址的,比如解析域名地址啦,URL指定的目錄等
robotparser
這個用的就比較少了,它就是用來解析網站的 robot.txt
ok
瞭解了 urllib 之後
我們就用 python 程式碼來模擬請求吧

image
開啟 pycharm
如果你還不太知道 pycharm 這個開發工具怎麼玩的話
你可以看看這玩意
PyCharm使用教程:PyCharm常用技巧指南
當然
你喜歡別的編輯器也無所謂
反正我覺得
Pycharm
就是

image
首先我們來模擬請求百度吧
超簡單
request 模組中的 urlopen 方法
首先我們匯入 urllib 的請求模組
import urllib.request
我們在瀏覽器訪問百度的時候
對於 python 來說
就是一句程式碼的事情
urllib.request.urlopen(' http://www.baidu.com' )
看
我們通過 request 模組的 urlopen 方法
直接用 Get 請求方式請求百度了
那麼返回的內容就是和瀏覽器一樣的
我們可以打印出來
response = urllib.request.urlopen(' http://www.baidu.com' )
print(response.read().decode('utf-8'))
我們執行

image
百度把原始碼返回給我們了

image
request 的 urlopen 方法
可以傳入的引數 主要 有 3 個
urllib.request. urlopen ( url , data=None , [ timeout , ]* )
第一個 **url **就是我們請求的連結
比如我們剛剛就請求百度
第二個引數 data
就是專門給我們 post 請求攜帶引數的
比如我們在登入的時候
可以把使用者名稱密碼封裝成 data 傳過去
在這裡的 data 的值我們可以用 byte 的型別傳遞
第三個引數 **timeout **就是設定請求超時時間
如果等好久伺服器都沒有給我們返回資料
我們就不鳥他了!
這就是 request 的 urlopen 主要用法。

image
urlopen 好像不錯
但是
如果我們要欺騙伺服器說我們是瀏覽器或者手機請求的呢?
這個時候我們需要新增請求頭資訊
也就是我們上次說的
request header
那麼
這個時候
就該讓 request 模組中的 Request 方法出場了
這個 Request 方法的引數多一些
主要的引數
urllib.request. Request ( url , data=None , headers={} , method=None )
我們除了定義 url 和 data 之外
我們還可以定義請求頭資訊
urlopen 預設是 Get 請求
當我們傳入引數它就為 Post 請求了
而 Request 可以讓我們自己定義請求的方式
這樣我們就可以使用 Request 來封裝我們的請求資訊

image
我們來用 Request 玩一下吧
我們來模擬登陸「逼乎」吧
沒錯
就是那個山寨知乎的網站
與世界分享你的裝逼技巧與見解

image
進入網站進行登入
我們來抓一下資料先
通過 Fiddler 可以看到我們的請求引數

image
這密碼不加密的

image
然後我們再看看我們的請求頭資訊

image
好了
知道這些之後我們就可以來模擬登入了
匯入 urllib
from urllib import request,parse
import ssl
在這裡我們還要匯入 ssl
因為逼乎這個b用的是 https
我們可以使用 ssl 未經驗證的上下文
context = ssl._create_unverified_context()
接著定義一下我們的請求 url 和 header
url = 'https://biihu.cc//account/ajax/login_process/' headers = { #假裝自己是瀏覽器 'User-Agent':' Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36', }
再定義一下我們的請求引數
dict = { 'return_url':'https://biihu.cc/', 'user_name':'[email protected]', 'password':'123456789', '_post_type':'ajax', }
我們把請求的引數轉化為 byte
data = bytes(parse.urlencode(dict),'utf-8')
然後我們就可以封裝 request 了
req = request.Request(url,data=data,headers=headers,method='POST')
最後我們進行請求
response = request.urlopen(req,context=context) print(response.read().decode('utf-8'))
ok
這樣我們就模擬登入了
執行一下看看
{"rsm":{"url":" https://biihu.cc/home/first_login-TRUE "},"errno":1,"err":null}
可以看到我們成功登入逼乎了

image
ok
以上就是 Urllib 的常用使用方法了
Python學習交流群:556370268,這裡有資源共享,技術解答,還有小編從最基礎的Python資料到專案實戰的學習資料都有整理,希望能幫助你更瞭解python,學習python。
