用Python自動填寫問卷星
很長時間沒有寫爬蟲相關的文章啦
這次來點乾貨,媽媽再也不用擔心我求同學幫忙填問卷了
緣起
我想被強迫寫論文的小夥伴有很多
被強迫用什麼問卷調查法的小夥伴也有很多被問卷折騰的死去活來的小夥伴當然也有很多
求爹爹告奶奶地在各大群請人幫忙填寫問卷
一來別人看到這種消息的心情就和看到代購差不多
二來肯定也不會認真填寫的啦不知道你們是不是,
反正每次我填問卷都是看都不看abc 逃~
所以我就想乾脆寫個小腳本來幫我填問卷好了
於是花了一個多小時搞定了基本思路
做問卷調查的小夥伴基本上都用過:
問卷星:https://www.wjx.cn/
所以這次我就以這個平台為例子
首先是創建一個測試問卷
然後隨便點點,點擊提交
看看都向伺服器發送了什麼樣的包
哇 so easy,居然只是向一個地址發送了:
- 問卷id curlD
- 發送時間 t
- 開始答題時間 starttime
- 不知道什麼鬼id rn
- 題目答案 submitdata
那模擬提交問卷的思路也就很清晰了
- 請求頁面 就解析出什麼鬼id(rn)
- 計算其他參數,如t、starttime
- 找到所有的問題,並隨機做答,構造submitdata
- 發送請求
具體代碼
最主要的就兩個部分
找到什麼鬼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頁面識別