美文网首页程序员
爬虫基础之urllib的简单使用 - POST 请求(二)

爬虫基础之urllib的简单使用 - POST 请求(二)

作者: 小飞牛_666 | 来源:发表于2018-04-24 17:56 被阅读0次
    上一章我们介绍了 get 请求,今天我就们谈谈 post 如何使用,其实在现实开发中我们也经常遇到 post 请求,比如用户登录一般都是 post 请求,下面我们以用户表单登录和有道翻译为例,进行post请求的案例操作:

    案例一:用户登录界面的操作 ( http://www.iqianyue.com/mypost/ )

    首先我们打开谷歌浏览器观察下请求方式:
    2.png
    观察了上面的请求方式之后我们开始写代码:

    导入库

    import urllib.request
    import urllib.parse

    #定义一个使用post请求数据的函数     登录表单
    def use_post_userdata(url, user_name, user_pwd):
        #以字典形式存储表单参数
        u_data = {
            "name":user_name,
            "pass":user_pwd
        }
        #将数据使用 urlencode 编码处理后,使用 encode()设置为 utf-8 编码
        post_data = urllib.parse.urlencode(u_data).encode("utf-8")
        req = urllib.request.Request(url, post_data)
        req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) \
            AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36")
        data = urllib.request.urlopen(req).read().decode("utf-8") # utf-8 解码成 Unicode
        #返回请求的数据,当然在这里你可以写入文件
        return data
    
    
    #调用
    url = "http://www.iqianyue.com/mypost/"
    response = use_post_userdata(url, "feiniu@163.com","哈哈")
    print(response)
    

    执行爬虫文件之后输出如下即可表明请求成功:

    3.png

    案例二:有道翻译(http://fanyi.youdao.com/

    我们首先要打开网页以及观察下开发者模式:
    4.png

    由于返回的是 json 字符串的格式,因此我们需要导入 json 模块以便解析 json 数据

    import json

    接下来定义方法:

    #定义请求有道词典翻译的post函数   (http://fanyi.youdao.com/)
    def use_post_youdao(url, content):
        #讲请求参数放入字典中,请求参数很多,其实放两个我们需要的即可
        yd_data = {
            "i":content,
            "doctype":"json" #返回json数据
        }
        req = urllib.request.Request(url)
        req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) \
            AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36")
        post_data = urllib.parse.urlencode(yd_data).encode("utf-8")#编码为utf-8
        response = urllib.request.urlopen(req, post_data)
        html = response.read().decode("utf-8")#解码为 Unicode 编码
        #这里由于我们设置返回的数据是json字符串,因此我们使用json库进行解析
        target = json.loads(html) #这里要注意:调用的事 loads()而不是load()方法
        #返回结果为:
        #{"type":"ZH_CN2EN","errorCode":0,"elapsedTime":1,"translateResult":[[{"src":"我喜欢你","tgt":"I like you"}]]}
        #解析
        data = target['translateResult'][0][0]['tgt']
        return data
    
    
    #调用
    #由于反爬做得比较好,因此实际的请求连接是下面这个
    url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
    response_data = use_post_youdao(url, "我喜欢你")
    print("翻译结果为-> %s"%response_data)
    
    

    执行文件之后即可看到我们想要的结果:

    5.png

    相关文章

      网友评论

        本文标题:爬虫基础之urllib的简单使用 - POST 请求(二)

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