Python如何利用Selenium或者PhantomJS爬取動(dòng)態(tài)網(wǎng)頁(yè)內(nèi)容
問(wèn)題描述
想用python做股票量化交易,第一步就是獲取股票的歷史數(shù)據(jù)。訪問(wèn)http://data.eastmoney.com/sto...網(wǎng)頁(yè),將網(wǎng)頁(yè)源碼打開(kāi)后看不見(jiàn)表格中的數(shù)據(jù),據(jù)說(shuō)是利用ajax技術(shù)加載的。在網(wǎng)上看見(jiàn)可以利用selenium和phantomJS來(lái)獲取這些動(dòng)態(tài)網(wǎng)頁(yè)內(nèi)容,但是不知道如何獲取完整源碼。請(qǐng)高手指點(diǎn)迷津
問(wèn)題解答
回答1:事實(shí)上,我剛才試了一下,頁(yè)面不是用xhr加載的,在頁(yè)面的源代碼中已經(jīng)有了,然后調(diào)用了一個(gè)類(lèi)把數(shù)據(jù)加載為一個(gè)table。比如,首頁(yè)的數(shù)據(jù):
然后,提取就直接使用re提取就可以了,得到文本以后json解析就好了。先寫(xiě)到這里。+++++++++++++++++++++++++++++++++++++++++
然后,就是這個(gè)網(wǎng)站不使用xhr加載數(shù)據(jù)而是使用的js來(lái)加載json數(shù)據(jù),動(dòng)態(tài)解析來(lái)顯示。具體分析需要用到j(luò)s的知識(shí),如果你了解也可以自己嘗試解析。
我嘗試了一下。
from urllib.parse import quoteimport timeimport requestsurl = 'http://datainterface.eastmoney.com/EM_DataCenter/JS.aspx?type=FD&sty=TSTC&st={sortType}&sr={sortRule}&p={page}&ps={pageSize}&js=var {jsname}=(x){param}'params = { 'sortType': 1, 'sortRule': 1, 'page': 2, 'pageSize': 50, 'jsname': 'Aafdafgq', # 這里使用的是隨機(jī)字符串,8位 'param': '&mkt=0&rt='}params['param'] += str(int(time.time()/30)) # 當(dāng)前時(shí)間url = url.format(**params)url = quote(url, safe=':=/?&()')req = requests.get(url)req.text
用這個(gè)組合 好處是簡(jiǎn)單暴力,壞處是效率較低。相當(dāng)于打開(kāi)一個(gè)你看不到的瀏覽器加載頁(yè)面,再把運(yùn)算好的結(jié)果讀取。新人學(xué)爬蟲(chóng)的話 推薦 python網(wǎng)絡(luò)數(shù)據(jù)采集 這本動(dòng)物書(shū)。你需要的說(shuō)明在采集動(dòng)態(tài)頁(yè)面那章。這書(shū)很薄 很實(shí)用。
回答3:我對(duì)js和json都不太了解,剛剛爬蟲(chóng)入門(mén)。經(jīng)過(guò)你的提示,我再查看了一下源碼,發(fā)現(xiàn)在defjson里面有這些數(shù)據(jù),不明白是怎樣把json里的數(shù)據(jù)顯示到tbody里面的。我用pandas的read_html可以抓到這些數(shù)據(jù),但是最后兩列會(huì)丟失。看來(lái)我得先去看看js和json
相關(guān)文章:
1. javascript - html5的data屬性怎么指定一個(gè)function函數(shù)呢?2. javascript - Express 和 request 如何代理遠(yuǎn)程圖片?3. python - 在使用Pycharm時(shí)經(jīng)常看到如下的樣式,小括號(hào)里紅色的部分是什么意思呢?4. javascript - 你們?cè)鯓訉?shí)現(xiàn)前端分頁(yè)的?5. javascript - 移動(dòng)端粘貼事件,onpaste事件在app中無(wú)效,在app中怎么監(jiān)測(cè)到粘貼事件6. android - react-native 的headless.js Java API 的代碼怎么使用?7. javascript - 關(guān)于fullpage.js 自動(dòng)高度失效的問(wèn)題8. python - Scrapy存在內(nèi)存泄漏的問(wèn)題。9. javascript - 原生canvas中如何獲取到觸摸事件的canvas內(nèi)坐標(biāo)?10. angular.js - angular2 有什么cool的loading組件么?
