1. 程式人生 > 實用技巧 >利用python爬蟲技術模擬提交問卷星/問卷網表單

利用python爬蟲技術模擬提交問卷星/問卷網表單

  • 前一段時間有個課程需要問卷星蒐集材料資訊,,但是問卷星這東西你不一個個求人哪有人願意點進去幫你填呢,,呵呵,不行,我自己來。。。
  • 本來想看看問卷星他的表單提交的請求方式,,奈何我太垃圾。看不懂那麼龐大的js,理不清其中的思路,,既然能力不行,那隻好用selenium這個自動化工具了。
  • 很多人學習python,不知道從何學起。
    很多人學習python,掌握了基本語法過後,不知道在哪裡尋找案例上手。
    很多已經做案例的人,卻不知道如何去學習更加高深的知識。
    那麼針對這三類人,我給大家提供一個好的學習平臺,免費領取視訊教程,電子書籍,以及課程的原始碼!??¤
    QQ群:623406465

先用簡單的一個表單做說明吧。找一個簡單的問卷

  • 觀察dom樹結構發現這個rel屬性可以確定唯一。那麼可以直接用css選擇器語法 a[rel=‘q1_2’]python字串可以用單引號表示,外面套雙引號時候不用考慮轉義字串,比較方便。
  • 既然找個這個位置,就可以用程式先模擬點選了,檢視中不中。貼上程式程式碼:
from selenium import webdriver
import time

browser = webdriver.Chrome()#宣告
browser.get('https://www.wjx.cn/jq/31521246.aspx')
time.sleep(2)
for i in range(10):
 browser.
get('https://www.wjx.cn/jq/31521246.aspx') browser.find_element_by_css_selector("a[rel='q1_3']").click() time.sleep(1) browser.find_element_by_css_selector("a[rel='q2_1']").click() time.sleep(1) browser.find_element_by_css_selector("a[rel='q3_2']").click() time.sleep(1) browser.find_element_by_id(
"submit_button").click()

有需要注意的是一定要注意時間間隔,稍微一塊就驗證碼伺候。

  • 之所以用chromediver是因為有介面的可以知道對錯,當程式無誤的時候可以換成phantomjs。另外,你可以根據已經有的回答情況,和實際情況,按照一定概率進行點選不同的選項,那麼就可以更逼真的實現資料的(偽造)??
  • 這篇純粹娛樂,如大佬能直接破解js請賜教。
  • 如果沒有selenium或者沒有無頭瀏覽器/chromedriver環境可以百度進行先安裝。
    問卷網:

    分析結構之後發現和問卷星的不一樣,並且還有多選框,多選框不能為空,我該如何處理呢?
    首先,我將我的問卷給我的好哥們姐們認真的填了一下,採集了14份左右的真實樣本。

  • 這樣我就可以根據這個資料模擬出很逼真的概率。
  • 說一下這裡不一樣的地方,這裡多個元素用selenium中的find_elements查詢多個元素。因為這裡不好找到唯一標識,只好通過位置確定元素。
    下面附上python程式碼,核心思想就是如果差不多就隨機編號,如果差得多jiuyong隨機100個數查詢百分比的範圍
 from selenium import webdriver
import time
import random
browser = webdriver.PhantomJS()

browser.get('https://www.baidu.com')
time.sleep(2)

for i in range(200):
  try:
    time.sleep(5)
    browser.get('https://www.wenjuan.com/s/2Uf6Fbe/')
    sex=browser.find_elements_by_css_selector("a[rel='question_5bfe34cd92beb5077b5fdaec']")
    index=random.randint(1,5)
    if index<3:
        sex[1].click()
    else:
        sex[0].click()
    time.sleep(0.5)
    grade=browser.find_elements_by_css_selector("a[rel='question_5bfe34cd92beb5077b5fdaed']")
    #index=random.randint(0,3)
    grade[2].click()
    time.sleep(0.5)
    istanguo=browser.find_elements_by_css_selector("a[rel='question_5bfe34ce92beb5077b5fdaee']")
    index=random.randint(1,10)
    if index>6:
        istanguo[0].click()
    else:
        istanguo[1].click()
    tiaojian=browser.find_elements_by_css_selector("a[rel='question_5bfe34ce92beb5077b5fdaf1']")
    index=random.randint(1,13)
    if index<=6:
        tiaojian[0].click()
    index = random.randint(1, 13)
    if index<=6:
        tiaojian[1].click()
    index = random.randint(1, 13)
    if index <= 3:
        tiaojian[2].click()
    if index<=8:
        tiaojian[3].click()
    index = random.randint(1, 13)
    if index<=3:
        tiaojian[4].click()
    index = random.randint(1, 13)
    if index <= 7:
        tiaojian[5].click()
    if index<=6:
        tiaojian[6].click()
    index = random.randint(1, 13)
    if index<=9:
        tiaojian[7].click()
    index = random.randint(1, 13)
    if index <= 9:
        tiaojian[8].click()
    if index<=2:
        tiaojian[9].click()
    index = random.randint(1, 13)
    if index<=2:
        tiaojian[10].click()
    index = random.randint(1, 16)
    if index <= 2:
        tiaojian[11].click()
    index = random.randint(1, 13)
    if index <= 8:
        tiaojian[12].click()
    age= browser.find_elements_by_css_selector("a[rel='question_5bfe34ce92beb5077b5fdaf4']")
    index=random.randint(0,100)
    if index<50:
        age[0].click()
    elif index>65:
        age[2].click()
    else:
        age[1].click()
    time.sleep(0.5)
    yingxiang=browser.find_elements_by_css_selector("a[rel='question_5bfe34ce92beb5077b5fdafb']")
    index=random.randint(1,10)
    jud=False
    if(index<=4):
        yingxiang[0].click()
        jud=True
    index = random.randint(1, 10)
    if (index <= 2):
        yingxiang[1].click()
        jud = True
    index = random.randint(1, 10)
    if (index <= 6):
        jud = True
        yingxiang[2].click()
    index = random.randint(1, 10)
    if (index <= 8):
        yingxiang[3].click()
        jud = True
    index = random.randint(1, 10)
    if (index <= 5):
        yingxiang[4].click()
        jud = True
    if jud==False:#防止運氣不好一個沒選上
        yingxiang[2].click()
    time.sleep(0.3)
    jichu=browser.find_elements_by_css_selector("a[rel='question_5bfe34ce92beb5077b5fdafd']")
    index=random.randint(0,100)
    if index<64:
        jichu[1].click()
    elif index>98:
        jichu[2].click()
    else:
        jichu[0].click()

    time.sleep(0.5)
    jiehun=browser.find_elements_by_css_selector("a[rel='question_5bfe395992beb5238625321e']")
    index=random.randint(0,100)
    if index<65:
        jiehun[2].click()
    elif index>98:
        jiehun[0].click()
    elif index>=65 and index<=83:
        jiehun[3].click()
    else:
        jiehun[1].click()
    browser.find_element_by_id("next_button").click()
  except Exception as e:
      print(e)

#input.clear()
#button = browser.find_element_by_class_name('btn-search')
#button.click()

檢視無誤之後不想彈出視窗將chromedriver換成phantomjs或設定不跳出引數即可即可。


可以看到答題人數上漲了(切記控制速度)