作者:Harkerbest
聲明:本文章為原創文章,本文章永久連結:https://harkerbest.kafuu.net.cn/?p=163,轉載請注明原文位址,盜版必究!!!
警告:本文章僅用于技術交流,禁止将本文章内容用于違法犯罪活動,違者後果自負!!!
本教程也可用于Python requests使用post送出表單的教學
随着網絡化的普及,網絡調查表在生活中随處可見,但是有些時候,我們每天都需要填寫一些内容比較固定的調查表,比如說體溫填報、健康登記等等,作為一名程式員,我們應該把這些機械的操作交給電腦,讓電腦造福人類。今天小編就來教大家如何使用Python爬蟲實作自動填寫網絡調查表。這樣,我們隻需要将編寫好的腳本部署到伺服器上就能夠每天定時完成填寫表格的任務了。
思路:
一般情況下,網絡調查表網站都會将你填寫好的資訊以表單的形式Post上去,是以我們有兩種方法可以實作自動填寫,一種是使用Selenium模拟操作浏覽器,在填寫調查表的網頁上通過id等元素進行定位并找到對應的輸入方框将預先設定好的内容填入,最後再模拟點選送出按鈕進行送出。這種方法的優點是簡單友善,如果無法通過抓包找到網站送出資訊的方式,那麼這是一種很好的方法,但是這種方法的缺點也很明顯,就是耗時大,完成啟動浏覽器并填寫資料至少也要10秒的時間,同時由于是可視化界面,需要很大的負載,如果是個人電腦則沒有太大的影響,但是如果是在生産環境下部署,很可能會使伺服器記憶體爆滿,是以這個方法并不适合生産環境下使用。
第二種方法,也是小編今天給大家介紹的方法,就是通過抓包找到網站送出資料時Post表單的URL位址并使用requests進行模拟送出表單,這樣就能夠既快捷又不占用記憶體地進行自動填寫調查表了。下面開始今天的教程!
(一)抓包分析表單
今天小編以某問卷網站進行示範,使用Python爬蟲自動填寫健康調查表。
首先我們需要通過抓包的方式找到網站使用post方式送出資料的URL位址和送出的表單的規律。方法如下:
1.通路問卷填寫頁面并填寫資訊
這裡的資訊可以随意填寫,隻需要記住在那個部分填寫了什麼就好。(如圖)

在網頁中填寫好資訊
2.按F12進入開發者工具并點選Network選項
注意:這一步一定不能調換順序,必須在點選按鈕送出資訊之前進入開發者工具,否則無法抓取到資料包!!!
首先按下F12進入開發者工具(不同浏覽器可能會不同,具體可以百度),接下來選擇Network選項。(如圖)
按F12進入開發者工具并選擇Network選項
3.點選送出按鈕進行送出并分析抓包資料
點選送出按鈕後可以看到右邊開發者工具中出現大量請求資訊(如圖)
開發者工具中出現大量請求資訊
一般情況下,送出資料的post請求在按鈕按下的時候就會發出,是以我們從最上面開始一個一個尋找……
經過尋找,發現在較前面有一個請求為post請求,并且post的表單(Form Data)内資訊為之前填寫的資訊(如圖),是以可以判定這一請求就是網站送出資料的請求。
請求方式為Post
送出表單(Form Data)内資訊為之前所填寫資訊
Requests Headers
其中第一幅圖内的Requests URL為下文需要用到的URL,第二幅圖的Form Data為下文用于送出表單的内容,第三幅圖的requests headers即為下文提到的(請求頭)headers。
接下來我們将利用Python使用抓取到的URL以及表單(Form Data)等資訊進行模拟送出表單實作自動送出調查問卷。
(二)使用Python進行模拟送出表單
本教程需要用到Python的requests庫,如果沒有安裝的請在指令提示符(cmd)中鍵入以下指令安裝:
pip install requests
1.設定URL并構造表單和請求頭(headers)
import requests #導入requests庫
url='https://xxxxx.com/xxxxx' #設定URL,其中URL為上文抓取到請求内容的Requests URL
data={'submitdata':'xxxxxxxxx'} #設定表單,内容為上文中抓取到的Form Data,其中表單形式為Python的字典
headers={#header内容即為上文中的requests headers,形式為Python字典,一般隻需要将User-Agent和Referer填入即可
' User-Agent':'xxxxxxx'
'Referer':'https://xxxxx'
}
2.使用設定好的URL、表單和請求頭送出表單
送出表單隻需要一行代碼即可解決:
sourse=requests.post(url,data=data,headers=headers).text
#其中url,data,headers均為上文設定好的内容,.text的作用是将傳回的Response轉化為Python的字元串,執行後傳回的結果将指派給sourse。
執行後可以根據傳回的結果自行分析送出是否成功(由于不同網站傳回結果不一樣,是以這裡無法做分析),通常網站傳回的會是下一個網頁的源碼或者是一個json的成功提示,具體需要自行分析。
全部代碼
這裡附上全部代碼,由于Python爬蟲的特殊性,不同的網站可能會需要部分改動,但是方法是不變的。是以,遇到特殊情況時需要根據本文的方法去仔細琢磨,要相信自己能夠解決問題!
import requests #導入requests庫
url='https://xxxxx.com/xxxxx' #設定URL,其中URL為上文抓取到請求内容的Requests URL
data={'submitdata':'xxxxxxxxx'} #設定表單,内容為上文中抓取到的Form Data,其中表單形式為Python的字典
headers={#header内容即為上文中的requests headers,形式為Python字典,一般隻需要将User-Agent和Referer填入即可
' User-Agent':'xxxxxxx'
'Referer':'https://xxxxx'
}
sourse=requests.post(url,data=data,headers=headers).text
#其中url,data,headers均為上文設定好的内容,.text的作用是将傳回的Response轉化為Python的字元串,執行後傳回的結果将指派給sourse。
print(sourse)#根據傳回資訊判斷是否送出成功
結語:
到這裡本教程就結束了,希望能夠幫到大家,如果你覺得這篇文章對你有幫助,請分享給更多需要的人,謝謝!!!