python - 如何爬取帶有日期選擇的ajax網(wǎng)站?
問(wèn)題描述
需要爬取三峽水庫(kù)的實(shí)時(shí)水情數(shù)據(jù),可以在網(wǎng)頁(yè)中選擇日期顯示水情信息,如果一天天選擇再?gòu)?fù)制數(shù)據(jù)發(fā)現(xiàn)很是耗時(shí),我現(xiàn)在需要將下圖中三峽水利樞紐2014年-2016年每天的數(shù)據(jù)爬下來(lái)。
網(wǎng)址如下:http://www.ctgpc.com.cn/sxjt/...
通過(guò)瀏覽器自帶的檢查工具,右鍵檢查元素,查看 network,查看調(diào)用的 ajax API 地址:初步分析后發(fā)現(xiàn)是通過(guò)ajax調(diào)用了以下網(wǎng)址,并用POST傳遞了一個(gè)日期數(shù)據(jù),例如今天2017-02-15給該網(wǎng)址:http://www.ctgpc.com.cn/eport...
Header如下:
Response如下:
之前有搜索到類(lèi)似的問(wèn)題:https://segmentfault.com/q/10...但是按照回答并沒(méi)能解決我的疑惑,因此在這里求助各位前輩,麻煩大家了
問(wèn)題解答
回答1:可以利用requests庫(kù)模擬post提交。 從游覽器檢查工具可以看到傳的參數(shù)是time:2017-02-07。定義data={'time': 日期譬如2017-02-07}。 然后你可以寫(xiě)個(gè)循環(huán),循環(huán)一次日期往后加一天。然后就r = requests.post('url', data=data, header=****)。 取出數(shù)據(jù)保存入庫(kù)。每次循環(huán)嫌慢的話(huà),可以加上gevent這個(gè)協(xié)程庫(kù)加快速度,看你也就想抓2年的數(shù)據(jù)循環(huán)365*2次就OK了
回答2:你已經(jīng)看到了那個(gè)包含數(shù)據(jù)的請(qǐng)求,那么你的問(wèn)題是什么呢?
回答3:抓包,再模擬post或get看看下面的內(nèi)容Python爬蟲(chóng)聯(lián)想詞視頻和代碼https://zhuanlan.zhihu.com/p/...
跟黃哥學(xué)Python爬蟲(chóng)抓取代理IP和驗(yàn)證。https://zhuanlan.zhihu.com/p/...跟黃哥學(xué)Python爬蟲(chóng)抓取代理IPhttps://zhuanlan.zhihu.com/p/...
回答4:都已經(jīng)拿到Json串了,數(shù)據(jù)更好拿了啊
相關(guān)文章:
1. mysql - 10g數(shù)據(jù)庫(kù)如何遷移2. php - 有關(guān)sql語(yǔ)句反向LIKE的處理3. 在視圖里面寫(xiě)php原生標(biāo)簽不是要迫不得已的情況才寫(xiě)嗎4. 獲取上次登錄ip的原理是啥?5. node.js - session怎么存到cookie,然后服務(wù)器重啟后還能獲取。數(shù)據(jù)庫(kù)不用mongodb或redis,數(shù)據(jù)庫(kù)是mysql6. 求救一下,用新版的phpstudy,數(shù)據(jù)庫(kù)過(guò)段時(shí)間會(huì)消失是什么情況?7. 為什么說(shuō)非對(duì)象調(diào)用成員函數(shù)fetch()8. fetch_field_direct()報(bào)錯(cuò)9. 為什么點(diǎn)擊登陸沒(méi)反應(yīng)10. mysql多表聯(lián)合查詢(xún)優(yōu)化的問(wèn)題
