1. 程式人生 > >從零開始系統化的學習寫Python爬蟲

從零開始系統化的學習寫Python爬蟲

主要是記錄一下自己寫Python爬蟲的經過與心得。
同時也是為了分享一下如何能更高效率的學習寫爬蟲。
IDE:Vscode Python版本: 3.6

 

 

 

用Python自動填寫問卷星

更多Python課程資料請加python程式語言學習QQ群 515267276”,

即可免費獲得精品課程資料哦!

很長時間沒有寫爬蟲相關的文章啦
這次來點乾貨,媽媽再也不用擔心我求同學幫忙填問卷了

緣起

我想被強迫寫論文的小夥伴有很多
被強迫用什麼問卷調查法的小夥伴也有很多
被問卷折騰的死去活來

的小夥伴當然也有很多

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

一來別人看到這種訊息的心情就和看到代購差不多
二來肯定也不會認真填寫的啦

不知道你們是不是,
反正每次我填問卷都是看都不看abc
逃~

所以我就想幹脆寫個小指令碼來幫我填問卷好了
於是花了一個多小時搞定了

基本思路

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

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

首先是建立一個測試問卷

 

然後隨便點點,點選提交
看看都向伺服器傳送了什麼樣的包

 

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

 

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

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

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

具體程式碼

更多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

來看看效果吧

執行時

 

問卷星後臺