當前位置:成語大全網 - 新華字典 - 如何使用 Python 抓取雪球網頁

如何使用 Python 抓取雪球網頁

Step.1 分析頁面

要抓壹個網頁,首先自然是要“研究”這個網頁。通常我會用兩種方式:

壹個是 Chrome 的 Developer Tools。通過它裏面的 Network 功能可以看到頁面發出的所有網絡請求,而大多數數據請求都會在 XHR 標簽下。點擊某壹個請求,可以看到其具體信息,以及服務器的返回結果。很多網站在對於某些數據會有專門的請求接口,返回壹組 json 或者 XML 格式的數據,供前臺處理後顯示。

Step.2 獲取頁面

分析完畢,開抓。

直接 urllib.urlopen 向目標網頁發送請求,讀出網頁。結果,失敗了……

看了下返回結果:

403 Forbidden

You don't have permission to access the URL on this server. Sorry for the inconvenience.

被拒了,所以這種赤裸裸地請求是不行的。沒關系,那就稍微包裝壹下:

send_headers = {

'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36',

'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',

'Connection':'keep-alive',

'Host':'xueqiu.com',

'Cookie':r'xxxxxx',

}

req = urllib2.Request(url, headers=send_headers)

resp = urllib2.urlopen(req)

html = resp.read()

header 數據都可以從 Developer Tools 裏拿到。這次順利抓到頁面內容。

壹般網站或多或少都會對請求來源做壹些阻攔,通過加 header 可以搞定大部分情況。

Step.3 提取數據

因為這個數據比較明顯,直接用通過壹些字符串查找和截取操作就可以取出來。

pos_start = html.find('SNB.cubeInfo = ') + len('SNB.cubeInfo = ')

pos_end = html.find('SNB.cubePieData')

data = html[pos_start:pos_end]

dic = json.loads(data)

dic 就是壹個包含數據的字典對象。之後想幹什麽就隨便妳了。

對於復雜壹點的情況,可以通過 BeautifulSoup 來定位 html 標簽。再不好辦的,就用正則表達式,基本都可以解決掉。

Step.4 處理數據

因為我想對數據進行持久化存儲,並且做展示和分析,所以我用了 django 裏的 ORM 來處理抓下來的數據。

# add Portfolio

portfolio, c = models.Portfolio.objects.get_or_create(code=dic['symbol'])

portfolio.name = dic['name']

portfolio.earnings = dic['total_gain']

portfolio.save()

# add Stock

stocks = dic['view_rebalancing']['holdings']

for s in stocks:

stock, c = models.Stock.objects.get_or_create(code=s['stock_symbol'])

stock.name = s['stock_name']

stock.count += 1

stock.weight += s['weight']

stock.save()

Portfolio 記錄下組合及其收益,Stock則記錄每支股票的被收錄數和總收錄份額。

對於抓取到的,壹般也可以存在文件中,或者直接通過 SQL 存入數據庫,視不同情況和個人喜好而定。

Step.5 批量抓取

前面的壹套做下來,就完整地抓取了壹組數據。要達到目的,還要設計壹下批量抓取的程序。

壹個要解決的問題就是如何獲得組合列表。這個可以再通過另壹個抓取程序來實現。然後根據這些列表來循環抓取就可以了。

若要細究,還要考慮列表如何保存和使用,如何處理抓取失敗和重復抓取,如何控制抓取頻率防止被封,可否並行抓取等等。

Step.6 數據分析

數據有了,妳要怎麽用它,這是個很大的問題。可以簡單的統計現象,也可以想辦法深入分析背後隱藏的邏輯。不多說,我也還只是在摸索之中。