zoukankan      html  css  js  c++  java
  • python中urllib.request和requests的使用和区别

    转载自https://blog.csdn.net/qq_38783948/article/details/88239109

    urllib.request

    我们都知道,urlopen()方法能发起最基本对的请求发起,但仅仅这些在我们的实际应用中一般都是不够的,可能我们需要加入headers之类的参数,那需要用功能更为强大的Request类来构建了

    在不需要任何其他参数配置的时候,可直接通过urlopen()方法来发起一个简单的web请求
    发起一个简单的请求

    import urllib.request
    url='https://www.douban.com'
    webPage=urllib.request.urlopen(url)
    print(webPage)
    data=webPage.read()
    print(data)
    print(data.decode('utf-8'))
    

    urlopen()方法返回的是一个http.client.HTTPResponse对象,需要通过read()方法做进一步的处理。一般使用read()后,我们需要用decode()进行解码,通常为utf-8,经过这些步骤后,最终才获取到我们想要的网页。
    添加Headers信息

    import urllib.request
    url='https://www.douban.com'
    headers = {
         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36',
     }
    response=urllib.request.Request(url=url,headers=headers)
    webPage=urllib.request.urlopen(response)
    print(webPage.read().decode('utf-8'))
    

    使用Request类返回的又是一个urllib.request.Request对象了。
    通常我们爬取网页,在构造http请求的时候,都需要加上一些额外信息,什么Useragent,cookie等之类的信息,或者添加代理服务器。往往这些都是一些必要的反爬机制

    requests

    通常而言,在我们使用python爬虫时,更建议用requests库,因为requests比urllib更为便捷,requests可以直接构造get,post请求并发起,而urllib.request只能先构造get,post请求,再发起。

    import requests
    url='https://www.douban.com'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36',
    }
    get_response = requests.get(url,headers=headers,params=None)
    post_response=requests.post(url,headers=headers,data=None,json=None)
    print(post_response)
    print(get_response.text)
    print(get_response.content)
    print(get_response.json)
    

    get_response.text得到的是str数据类型。
    get_response.content得到的是Bytes类型,需要进行解码。作用和get_response.text类似。
    get_response.json得到的是json数据。

    总而言之,requests是对urllib的进一步封装,因此在使用上显得更加的便捷,建议小伙伴们在实际应用当中尽量使用requests。

  • 相关阅读:
    库函数strstr的实现
    用两个队列实现一个栈
    二叉树的镜像
    VMware网络连接模式—桥接、NAT以及仅主机模式的详细介绍和区别
    CentOS6.5下搭建Samba服务实现与Windows系统之间共享文件资源
    CentOS6.5下搭建ftp服务器(三种认证模式:匿名用户、本地用户、虚拟用户)
    CentOS6.5下搭建VNC服务器
    MySQL数据库自动备份
    MySql登陆密码忘记了怎么办?MySQL重置root密码方法
    CentOS6.5使用yum快速搭建LAMP环境
  • 原文地址:https://www.cnblogs.com/faberbeta/p/13894160.html
Copyright © 2011-2022 走看看