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. html5 - ElementUI table中el-table-column怎么設(shè)置百分比顯示。2. python - 使用readlines()方法讀取文件內(nèi)容后,再用for循環(huán)遍歷文件與變量匹配時(shí)出現(xiàn)疑難?3. 對(duì)mysql某個(gè)字段監(jiān)控的功能4. css3 - less或者scss 顏色計(jì)算的知識(shí)應(yīng)該怎么學(xué)?或者在哪里學(xué)?5. 注冊(cè)賬戶(hù)文字不能左右分離6. javascript - table列過(guò)多,有什么插件可以提供列排序和選擇顯示列的功能7. css - 網(wǎng)頁(yè)div區(qū)塊 像蘋(píng)果一樣可左右滑動(dòng) 手機(jī)與電腦8. javascript - 數(shù)組的過(guò)濾和渲染9. html - vue項(xiàng)目中用到了elementUI問(wèn)題10. JavaScript事件
