美文网首页
Python提交表单

Python提交表单

作者: 其实我很菜啊 | 来源:发表于2018-06-17 12:22 被阅读0次

    今天用一个有道翻译的例子来讲解如何用 python 来提交表单数据。

    一、获取请求信息

    我使用的是谷歌浏览器,打开调式模式再输入中文后提交请求


    image.png

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

    1. 请求 Request URL
    2. User-Agent
    3. FormData 数据

    其中 FormData 就是我们提交的表单内容

    二、python 模拟提交表单

    1. 将 formdata 构造成字典
        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'
    

    这是为了防止服务器识别出是代码模拟访问进行拦截

    1. 发送请求并获取响应信息
        data = urllib.parse.urlencode(data).encode("UTF-8")#格式化表单内容
        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) 为请求添加信息

    • 测试结果


      image.png

    三、隐藏

    隐藏是为了服务器识别出你是正常使用浏览器进行预览还是使用代码进行爬虫,通常服务器会检测 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'
    

    服务器会检测你访问的次数,如果你在短时间内进行 N 多次访问,那么服务器可能会为了防止自己遭受攻击而封你的 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 进行访问,在使用时为了提高效率可以开启线程,进行并发访问。

    相关文章

      网友评论

          本文标题:Python提交表单

          本文链接:https://www.haomeiwen.com/subject/pgcweftx.html