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