python 爬蟲 urllib庫 學習筆記(一)

2021-09-19 14:01:47 字數 4074 閱讀 7521

爬蟲對於金融二級市場投資來說是重要的工具,可以幫助我們高效的提取資料,方便我們之後進行量化投資需要的圖表生成,歷史回測,訊號發出等等工作。 底層資料的價值決定了策略的價值,這是我認為的資料對於量化投資的重要性。我認為使用市面上可以免費獲得的資料庫中的資料,並不會使得基本面量化策略的效果得到改善。資料探勘,爬取資料,高效的處理資料應該是基本面量化策略的最基礎的工作,也是任務量最大的工作。因此爬蟲則顯得尤為重要。

urllib有4個模組,request(用來模擬傳送請求,就像在瀏覽器中輸入**。);error(異常處理模組,用來捕獲異常,防止程式終止);parse(提供了許多url處理方法,拆分,解析,合併);robotparser(使用較少)。

request模組提供了urlopen方法可以模擬瀏覽器的請求發起過程。

import urllib.request

response = urllib.request.urlopen("")

print(response.read().decode("utf-8"))

print(type(response))

我們得到了網頁的源**,並且得到了乙個httpresponse型別的物件,包括read(),readinto(),getheader(name),getheaders()等方法。以及msg,version,status,closed等屬性。

import urllib.request

response = urllib.request.urlopen("")

# 返回狀態碼,200代表成功

print(response.status)

# 會響應的頭資訊,並且可以獲得指定引數的頭資訊。

print(response.getheaders())

print(response.getheader("server"))

下面詳細觀察一下urlopen方法的引數設定

urllib.request.urlopen(url, data=none, [timeout,]*, cafile=none, capath=none, cadefault=false, context=none)
可以看見除了url位址以外我們還可以傳遞替他內容。

data引數:

import urllib.parse

import urllib.request

data = bytes(urllib.parse.urlencode(), encoding="utf-8")

response = urllib.request.urlopen("", data=data)

print(response.read())

data引數可以幫助我們模擬表單提交的方式,以post方式傳輸資料。

timeout引數:如果請求超出了設定的時間,還沒有得到響應,就會丟擲異常。

其他引數:cafile和capath兩個引數指定ca證書和它的路徑。

由於urlopen方法提供的引數較少,我們在傳送請求的過程中需要傳遞比較多的引數資訊。所以更多的時候我們是用request類來構建。

class urllib.request.request(url, data=none, headers={}, origin_req_host=none, unverifiable=false, method=none)
第乙個引數是url是必傳引數,其他都是可選引數。第二個引數data引數,必須傳bytes(位元組流)型別的,可以用urllib.parse的urlencode()編碼。第三引數headers是乙個字典,也就是請求頭。比較關鍵,往往我們第一次訪問就被**識別是爬蟲的原因多半是我們沒有設定headers。第四個引數origin_req_host指的是請求方的host名稱或者ip位址。第六個引數method是乙個字串,表示請求的方法,get,post,put。

from urllib import request, parse

url = ""

headers =

dict =

data = bytes(parse.urlencode(dict), encoding="utf-8")

req = request.request(url = url, data=data, headers=headers, method="post")

response = request.urlopen(req)

print(response.read().decode("utf-8"))

有些**需要登陸驗證,需要輸入使用者名稱和密碼。

這時需要借助httpbasicauthhandler可以完成,對於一些高階操作,我們需要用到urllib模組裡面的basehandler類,它是其他handler的父類。

print(e.reason)首先需要例項化httpbasicauthhandler物件,引數是httppasswordmgrwithdefaultrealm物件,利用add_password()新增使用者名稱和密碼。整個過程還是比較麻煩的,之後python會有更方便的庫來完成上述工作。

做爬蟲的過程中使用**是非常常見的情況,如果需要新增**,可以這樣做。

from urllib.error import urlerror

from urllib.request import proxyhandler, build_opener

proxy_handler = proxyhandler()

opener = build_opener(proxy_handler)

try:

response = opener.open("")

print(response.read().decode("utf-8"))

except urlerror as e:

print(e.reason)

urlerror:來自urllib庫的error模組,具有reason屬性,返回錯誤的原因。

httperror:urlerror的子類,專門處理http請求的錯誤,有三個屬性,code(返回狀態碼),reason(返回錯誤原因),headers(返回請求頭)

print("successfully")urllib庫還提供了parse模組,可以幫助我們處理url的標準介面,實現url的各部分的抽取,合併,鏈結轉換。由於python爬蟲的庫種類太多,所以我只列出了每個庫較為常用的方法,之後會補充其他有用的方法。

python爬蟲 urllib庫基本使用

匯入urllib from urllib import request 明確url base url 發起乙個http請求,返回乙個類檔案物件 response request.urlopen base url 獲取網頁內容 html response.read decode utf 8 將網頁寫入...

python 爬蟲基礎篇 urllib庫

衣帶漸寬終不悔,為伊消得人憔悴。urllib.request模組 該模組是urllib的核心模組用於傳送請求,獲取請求返回結果。urlopen 發起請求 response urllib.request.urlopen url,data none,timeout,cafile none,capath ...

Python 爬蟲乾貨之urllib庫

小試牛刀 怎樣扒網頁呢?其實就是根據url來獲取它的網頁資訊,雖然我們在瀏覽器中看到的是一幅幅優美的畫面,但是其實是由瀏覽器解釋才呈現出來的,實質它是一段html 加 js css,如果把網頁比作乙個人,那麼html便是他的骨架,js便是他的肌肉,css便是它的衣服。所以最重要的部分是存在於html...