從零開始系統化的學習寫Python爬蟲
阿新 • • 發佈:2018-11-26
主要是記錄一下自己寫Python爬蟲的經過與心得。
同時也是為了分享一下如何能更高效率的學習寫爬蟲。
IDE:Vscode Python版本: 3.6
用Python自動填寫問卷星
更多Python課程資料請加python程式語言學習QQ群 515267276”,
即可免費獲得精品課程資料哦!
很長時間沒有寫爬蟲相關的文章啦
這次來點乾貨,媽媽再也不用擔心我求同學幫忙填問卷了
緣起
我想被強迫寫論文的小夥伴有很多
被強迫用什麼問卷調查法的小夥伴也有很多
被問卷折騰的死去活來
求爹爹告奶奶地在各大群請人幫忙填寫問卷
一來別人看到這種訊息的心情就和看到代購差不多
二來肯定也不會認真填寫的啦
不知道你們是不是,
反正每次我填問卷都是看都不看abc
逃~
所以我就想幹脆寫個小指令碼來幫我填問卷好了
於是花了一個多小時搞定了
基本思路
做問卷調查的小夥伴基本上都用過:
所以這次我就以這個平臺為例子
首先是建立一個測試問卷
然後隨便點點,點選提交
看看都向伺服器傳送了什麼樣的包
哇 so easy,居然只是向一個地址傳送了:
- 問卷id curlD
- 傳送時間 t
- 開始答題時間 starttime
- 不知道什麼鬼id rn
- 題目答案 submitdata
那模擬提交問卷的思路也就很清晰了
- 請求頁面 就解析出什麼鬼id(rn)
- 計算其他引數,如t、starttime
- 找到所有的問題,並隨機做答,構造submitdata
- 傳送請求
具體程式碼
更多Python課程資料請加python程式語言學習QQ群 515267276”,
即可免費獲得精品課程資料哦!
最主要的就兩個部分
找到什麼鬼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
來看看效果吧
執行時
問卷星後臺