zoukankan      html  css  js  c++  java
  • 爬虫第一篇:爬虫详解之urllib.request模块

    我将urllib.request 的GET请求和POST请求两种方法做了总结

    GET请求

    GET请求爬取:
    import urllib.request
    import urllib.parse
    
    headers = {"User-Agent":"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; Tablet PC 2.0; .NET4.0E)"}
    
    -------对字符串进行编码的第一种方法---------
    baseurl = "http://www.baidu.com/s?wd="
    key = input("请输入要搜索的内容:")
    url = baseurl + urllib.parse.quote(key)
    
    -------对字符串进行编码的第二种方法---------
    baseurl = "http://www.baidu.com/s?"
    key = input("请输入要搜索的内容:")
    key = urllib.parse.urlencode({"wd":key})
    url = baseurl + key
    
    -------获取响应对象的第一种方法-------------
    # 创建请求对象
    req = urllib.request.Request(url,headers=headers)
    # 获取响应对象
    res = urllib.request.urlopen(req)
    
    -------获取响应对象的第二种方法-------------
    # 直接发请求,并得到响应对象
    res = urllib.request.urlopen(url)
    
    # 获取内容

      html = res.read().decode("utf-8") # 获取字符串
      # res.read() # 数据类型bytes
      # res.getcode() : 返回HTTP的响应码

    POST请求

    Post请求:
    import urllib.request
    import urllib.parse
    import json
    
    key = input("请输入要翻译的内容:")
    data = {
            "i":key,
            "from":"AUTO",
            "to":"AUTO",
            "smartresult":"dict",
            "client":"fanyideskweb",
            "salt":"15458120942800",
            "sign":"108feafc7c01c7461a41034463a8df9b",
            "ts":"1545812094280",
            "bv":"363eb5a1de8cfbadd0cd78bd6bd43bee",
            "doctype":"json",
            "version":"2.1",
            "keyfrom":"fanyi.web",
            "action":"FY_BY_REALTIME",
            "typoResult":"false"
        }
    # 把data转为bytes数据类型
    data = urllib.parse.urlencode(data).encode("utf-8")
    # 发请求,获响应,获取内容
    url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
    headers = {"User-Agent":"Mozilla/5.0"}
    req = urllib.request.Request
                (url,data=data,headers=headers)
    res = urllib.request.urlopen(req)
    html = res.read().decode("utf-8")
    
    # 把json格式的字符串转为python中字典
    rDict = json.loads(html)
    result = rDict["translateResult"][0][0]["tgt"]
    print(result)

    总结

    从上面我们可以看出,GET请求和POST请求的区别主要是数据的组织形式不同。

    GET请求数据是通过url直接传过去, POST请求数据是通过body传过去的

    我上面的data数据是直接去网站 F12 拦截请求拿到的

  • 相关阅读:
    SVN 、Git、Github的使用
    asp.net core 系列 8 Razor框架路由(下)
    asp.net core 系列 7 Razor框架路由(上)
    asp.net core 系列 6 MVC框架路由(下)
    asp.net core 系列 5 MVC框架路由(上)
    asp.net core 系列 4 注入服务的生存期
    asp.net core 系列 3 依赖注入服务
    asp.net core 系列 2 启动Startup类介绍
    asp.net core 系列 1 概述
    iframe和response.sendRedirect()跳转到父页面的问题
  • 原文地址:https://www.cnblogs.com/leijing0607/p/7687984.html
Copyright © 2011-2022 走看看