用Python自動填寫問卷星

很長時間沒有寫爬蟲相關的文章啦

這次來點乾貨,媽媽再也不用擔心我求同學幫忙填問卷了

緣起

我想被強迫寫論文的小夥伴有很多

被強迫用什麼問卷調查法的小夥伴也有很多

被問卷折騰的死去活來的小夥伴當然也有很多

求爹爹告奶奶地在各大群請人幫忙填寫問卷

一來別人看到這種消息的心情就和看到代購差不多

二來肯定也不會認真填寫的啦

不知道你們是不是,

反正每次我填問卷都是看都不看abc

逃~

所以我就想乾脆寫個小腳本來幫我填問卷好了

於是花了一個多小時搞定了

基本思路

做問卷調查的小夥伴基本上都用過:

問卷星:wjx.cn/

所以這次我就以這個平台為例子

首先是創建一個測試問卷

然後隨便點點,點擊提交

看看都向伺服器發送了什麼樣的包

哇 so easy,居然只是向一個地址發送了:

  • 問卷id curlD
  • 發送時間 t
  • 開始答題時間 starttime
  • 不知道什麼鬼id rn
  • 題目答案 submitdata

那模擬提交問卷的思路也就很清晰了

  1. 請求頁面 就解析出什麼鬼id(rn)
  2. 計算其他參數,如t、starttime
  3. 找到所有的問題,並隨機做答,構造submitdata
  4. 發送請求

具體代碼

最主要的就兩個部分

找到什麼鬼ID rn

def parse_post_url(resp): 解析出提交問卷的url # 找到rn rn = int(resp.html.search(rndnum="{}")[0].split(.)[0]) # 提交問卷的時間 raw_t = round(time.time(), 3) t = int(str(raw_t).replace(., )) # 模擬開始答題時間 starttime = datetime.fromtimestamp( int(raw_t) - randint(1, 60 * 3)).strftime("%Y/%m/%d %H:%M:%S") url = POST_URL_MAP.format(QUESTION_ID, t, starttime, rn) return url

找到所有題目

def parse_post_data(resp): 解析出問題和選項 返回post_data post_data = {submitdata: ""} questions = resp.html.find(fieldset, first=True).find(.div_question) for i, q in enumerate(questions): title = q.find(.div_title_question_all, first=True).text choices = [t.text for t in q.find(label)] random_index = randint(0, len(choices) - 1) choice = choices[random_index] post_data[submitdata] += {}${}}}.format(i+1, random_index+1) print(QUESTION_INFO.format(title, choices, choice)) time.sleep(0.5) # 去除最後一個不合法的`}` post_data[submitdata] = post_data[submitdata][:-1] return post_data

來看看效果吧

執行時

問卷星後台

關注公眾號「findyourownway

回復:『問卷星』

獲取全部代碼哦~


推薦閱讀:

爬蟲-使用Python3爬取360DOC文檔
python中 if-else 與 try-except的轉換 與while 與 whileTrue-try-except的轉換
關於在Python中安裝Scrapy 框架遇到的問題的解決方案
使用requests+beautifulsoup爬取你想要的數據
基於餘弦相似性的404頁面識別

TAG:Python | python爬蟲 | 問卷調查 |