問題背景:需要統(tǒng)計雁門關(guān)10年的客流量數(shù)據(jù),每次需要選擇時間,然后提交,網(wǎng)頁上回返回客流量數(shù)據(jù), 網(wǎng)址鏈接:http://www./yuce/index/cid/166.shtml 思路:網(wǎng)頁選擇時間,然后提交時間,頁面返回一個數(shù)據(jù),和工作上遇到的POST類似,考慮通過python編寫一個post循環(huán)得到相應(yīng)的數(shù)據(jù)并保存到excel。 步驟: 1、在chrome打開網(wǎng)頁,F(xiàn)12進(jìn)入調(diào)試狀態(tài) 選擇network找到Form Data就是每次post給后臺服務(wù)器的數(shù)據(jù),可以發(fā)現(xiàn)post的data有時間date和dosubmit信息。 2、python腳本編寫 # coding=utf-8 import requests import datetime post_url = 'http://www./yuce/index/cid/166.shtml' # 現(xiàn)在的時間 now = datetime.datetime.now() # 遞減的時間 delta = datetime.timedelta(days=-1) # 10年后的時間 endnow = now - datetime.timedelta(days=3662) # 10年后的時間轉(zhuǎn)換成字符串 endnow = str(endnow.strftime('%Y-%m-%d')) offset = now csvfile = open('output.csv', 'w') # 創(chuàng)建記錄信息 csvfile.write('時間' ',') csvfile.write('人數(shù)' '\n') # 當(dāng)日期減少到10年后的日期,循環(huán)結(jié)束 while str(offset.strftime('%Y-%m-%d')) != endnow: offset = delta data = { 'date': str(offset.strftime('%Y-%m-%d')), 'dosubmit': '查詢 '} tqHtml = requests.post(post_url, data=data) res = tqHtml.text num = res[10300:10400].split('<')[0] print('統(tǒng)計到' str(offset.strftime('%Y-%m-%d')) '的來訪客流量') csvfile.write(str(offset.strftime('%Y-%m-%d')) ',') csvfile.write(num '\n') 代碼中首先計算了10年的時間天數(shù)為3662,達(dá)到對應(yīng)的時間字符串,爬蟲的數(shù)據(jù)放在csv文件中。通過requests模塊進(jìn)行post,返回的html文件,嘗試了json等方式都無法提取到相應(yīng)的客流量數(shù)據(jù),最后采用了字符串的處理方法,通過split解析出了相應(yīng)的人數(shù)信息。 |
|