Python提交表單

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

一、獲取請(qǐng)求信息

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


image.png

點(diǎn)擊 Network -> XHR -> POST提交方法 ->Headers
保存以下信息:

  1. 請(qǐng)求 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. 添加請(qǐng)求頭信息
    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í)別出是代碼模擬訪問進(jìn)行攔截

  1. 發(fā)送請(qǐng)求并獲取響應(yīng)信息
    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) 為請(qǐng)求添加信息

  • 測(cè)試結(jié)果


    image.png

三、隱藏

隱藏是為了服務(wù)器識(shí)別出你是正常使用瀏覽器進(jìn)行預(yù)覽還是使用代碼進(jìn)行爬蟲,通常服務(wù)器會(huì)檢測(cè) 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ù)器會(huì)檢測(cè)你訪問的次數(shù),如果你在短時(shí)間內(nèi)進(jìn)行 N 多次訪問,那么服務(wù)器可能會(huì)為了防止自己遭受攻擊而封你的 IP
可以通過加入定時(shí)器進(jìn)行解決。

while True:
#Code
time.sleep(3)

還有一種就是使用 ip 代理進(jìn)行訪問

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)

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

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

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

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

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