zoukankan      html  css  js  c++  java
  • Http请求的Python实现

    一、urllib实现: urllib是Python中的内置模块
        实现一个完整的请求与响应模型:urllib提供一个基础函数urlopen,通过向指定的url发出请求来获取数据。
              import urllib.request
               response = urllib.request.urlopen('http://www.zhihu.com')
               html = response.read()
               print(html)
    二、httplib/urllib实现: httplib模块是一个底层基础模块,可以看到建立http请求的每一步,但是实现的功能比较少,在Python爬虫开发中基本上用不到。

    三、Requests实现:是Python爬虫开发中最为常用的方式。Requests库是第三方模块,需要额外进行安装
                      pip3   install   requests

      1、实现完整的请求响应模型
         (1)get方式:
                 import requests
                     r = requests.get('http://www.baidu.com')
                     print(r.text)
          (2)post方式:
                 import requests
                     r = requests.post('http://www.baidu.com',data={‘key’:’value’})
                     print(r.text)

       2、响应与编码“:
             import requests
                 r = requests.get('http://www.baidu.com')
                 print('content----->'+str(r.content))
                 print('text----->'+r.text)
                 print('encoding----->'+r.encoding)
                  r.encoding = 'utf-8'
                  print('text----→'+r.text)

    r.content:返回的是字节形式
    r.text:返回的是文本形式
    r.encoding:返回的是根据HTTP头猜测的网页编码格式

      3、请求头headers处理:在Requests的get函数中添加headers参数即可
        import requests
         user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5;windows NT'
         headers = {'User-Agent':user_agent}
         r = requests.get('http://www.baidu.com',headers=headers)
         print('content----→'+str(r.content))

      4、响应码code和响应头headers处理
          import requests
            user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5;windows NT'
            headers = {'User-Agent':user_agent}
            r = requests.get('http://www.baidu.com',headers=headers)

           if r.status_code == requests.codes.ok:
                 print(r.status_code) #响应码
                 print(r.headers) #响应头
                 print(r.headers.get('content-type'))#获取响应头的某个字段(推荐)
           else:
                  r.raise_for_status()
    注意:raise_for_status()函数是用来主动地产生一个异常,当响应码是4XX或5XX时,raise_for_status()函数会抛出异常,而响应码为200时,raise_for_status()函数返回None
    5、Cookie处理:
       (1)若响应中包含Cookie的值:
             import requests
                user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5;windows NT'
                headers = {'User-Agent':user_agent}
                r = requests.get('http://www.baidu.com',headers=headers)
                for cookie in r.cookies.keys():
                         print(cookie+':'+r.cookies.get(cookie))

         (2)自定义Cookie值发送出去:
                   import requests
                   user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5;windows NT'
                   headers = {'User-Agent':user_agent}
                   cookies = dict(name='maomi',age='3')
                   r = requests.get('http://www.baidu.com',headers=headers,cookies=cookies)
                   print(r.text)

          (3)自动处理Cookie:不需要关心Cookie的值,只希望每次访问时,程序自动把Cookie带上
            import requests
            loginUrl = 'http://www.sina.com/login'
            s = requests.Session()
           #首先访问登录界面,作为游客,服务器会先分配一个cookie
            r = s.get(loginUrl,allow_redirects=True)
            datas = {'name':'maomi','passwd':'maomi'}
            #向登录链接发送post请求,验证成功,游客权限转为会员权限
            r = s.post(loginUrl,data=datas,allow_redirects=True)
             print(r.text)

    6、重定向和历史信息:处理重定向只是需要设置一下 allow_redirects字段即可,将 allow_redirects设置为True,则允许重定向;设置为False,则禁止重定向。如果允许重定向,则可以通过r.history字段查看历史信息
    7、超时设置:通过参数timeout来进行设置
    8、代理设置:使用代理Proxy,可以为任意请求方法通过设置proxies参数来配置单个请求
              import requests
                  proxies = {
                           "http":"http://0.10.1.10:3318",
                           "https":"http://10.10.1.10:1080"
                    }
                 requests.get("http://example.org",proxies=proxies)

  • 相关阅读:
    字符菱形
    字符三角形
    10:超级玛丽游戏
    09:字符菱形
    08:字符三角形
    07:输出浮点数
    06:空格分隔输出
    05:输出保留12位小数的浮点数
    04:输出保留3位小数的浮点数
    02:输出第二个整数
  • 原文地址:https://www.cnblogs.com/lone5wolf/p/10877083.html
Copyright © 2011-2022 走看看