Python提交表單

今天用一個有道翻譯的例子來講解如何用 python 來提交表單數(shù)據(jù)。

一、獲取請求信息

我使用的是谷歌瀏覽器,打開調(diào)式模式再輸入中文后提交請求


image.png

點擊 Network -> XHR -> POST提交方法 ->Headers
保存以下信息:

  1. 請求 Request URL
  2. User-Agent
  3. FormData 數(shù)據(jù)

其中 FormData 就是我們提交的表單內(nèi)容

二、python 模擬提交表單

  1. 將 formdata 構(gòu)造成字典
    data['i'] = content
    data['from'] = 'AUTO'
    data['to'] = 'AUTO'
    data['smartresult'] = ['dict']
    data['client'] = ['fanyideskweb']
    data['salt'] = '1529068716890'
    data['sign'] = 'e352f557c7770386ab1a2ce3667fa09b'
    data['doctype'] = 'json'
    data['version'] = '2.1'
    data['keyfrom'] = 'fanyi.web'
    data['action'] = 'FY_BY_CLICKBUTTION'
    data['typoResult'] = 'false'
  1. 添加請求頭信息
    head['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'

這是為了防止服務(wù)器識別出是代碼模擬訪問進行攔截

  1. 發(fā)送請求并獲取響應信息
    data = urllib.parse.urlencode(data).encode("UTF-8")#格式化表單內(nèi)容
    req = urllib.request.Request(url,data,head)
    response = urllib.request.urlopen(req)
    html = response.read().decode("utf-8")
    taget = json.loads(html)
    res = taget['translateResult'][0][0]['tgt']

使用 urllib.request.Request(url,data,head) 為請求添加信息

  • 測試結(jié)果


    image.png

三、隱藏

隱藏是為了服務(wù)器識別出你是正常使用瀏覽器進行預覽還是使用代碼進行爬蟲,通常服務(wù)器會檢測 User-Agent 的信息,所以這就是要加上 headers 的原因。

    head['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'

服務(wù)器會檢測你訪問的次數(shù),如果你在短時間內(nèi)進行 N 多次訪問,那么服務(wù)器可能會為了防止自己遭受攻擊而封你的 IP
可以通過加入定時器進行解決。

while True:
#Code
time.sleep(3)

還有一種就是使用 ip 代理進行訪問

ipList = {'138.255.111.240:8080','178.209.108.238:8080','115.223.196.1:9000'}

proxy_support = urllib.request.ProxyHandler({'http':random.choice(ipList)})

opener = urllib.request.build_opener(proxy_support)
opener.addheaders = [('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36')]

urllib.request.install_opener(opener)

response = urllib.request.urlopen(url)

隨機使用一個 ip 進行訪問,在使用時為了提高效率可以開啟線程,進行并發(fā)訪問。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,939評論 1 92
  • ??2005 年,Jesse James Garrett 發(fā)表了一篇在線文章,題為“Ajax: A new App...
    霜天曉閱讀 942評論 0 1
  • 昨天孩子告訴我今天不在家住,知道他也不是申請是通知,就沒有說什么, 爺爺奶奶今天來了,中午因為有事耽誤,孩子餓了又...
    心中承諾閱讀 307評論 2 4
  • 前些天,經(jīng)過一些驗證信息的填寫和四小時的等待,與我分離已一年有余的QQ號被我找了回來,我登錄進去,許久未聯(lián)系好友,...
    夜半獨上高樓閱讀 330評論 5 3

友情鏈接更多精彩內(nèi)容