美文网首页数据蛙数据分析每周作业
网络爬虫入门(三)之 Requests库的基本使用

网络爬虫入门(三)之 Requests库的基本使用

作者: Chad你要加油 | 来源:发表于2019-02-08 17:29 被阅读8次

    什么是Requests

    Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库,requests是python实现的最简单易用的HTTP库,建议爬虫使用requests库
    (注:默认安装好python之后,是没有安装requests模块的,需要单独通过pip安装)

    pip install requests
    

    requests功能

    代码示例:

    import requests  # 导入所需的库
    
    response  = requests.get("https://www.baidu.com")
    print(type(response))
    print(response.status_code)
    print(type(response.text))
    print(response.text)
    print(response.cookies)
    print(response.content)
    print(response.content.decode("utf-8"))
    
    

    我们可以看出response使用起来确实非常方便,这里有个问题需要注意一下:

    很多情况下的网站如果直接response.text会出现乱码的问题,所以这个使用response.content
    这样返回的数据格式其实是二进制格式,然后通过decode()转换为utf-8,这样就解决了通过response.text直接返回显示乱码的问题.

    请求发出后,Requests 会基于 HTTP 头部对响应的编码作出有根据的推测。当你访问 response.text 之时,Requests 会使用其推测的文本编码。你可以找出 Requests 使用了什么编码,并且能够使用 response.encoding 属性来改变它.如:

    response =requests.get("http://www.baidu.com")
    response.encoding="utf-8"
    print(response.text)
    
    

    不管是通过response.content.decode("utf-8)的方式还是通过response.encoding="utf-8"的方式都可以避免乱码的问题发生

    常用的请求方式 GET & POST

    其他方法不一 一列举了

    通过GET访问一个页面,只需要几行代码:

    import requests
    r = requests.get('https://www.douban.com/') # 豆瓣首页
    print(r.status_code)
    #返回结果 “ 200
    
    print(r.text)
    #返回结果:
    '<!DOCTYPE HTML>\n<html>\n<head>\n<meta name="description" content="提供图书、电影、音乐唱片的推荐、评论和...'
    
    

    对于带参数的URL,传入一个dict作为params参数:

    r = requests.get('https://www.douban.com/search', params={'q': 'python', 'cat': '1001'})
    
    print(r.url) # 实际请求的URL
    
    # 结果:
    'https://www.douban.com/search?q=python&cat=1001'
    
    

    requests自动检测编码,可以使用encoding属性查看

    print(r.encoding)
    # 结果:'utf-8'
    
    

    需要传入HTTP Header时,我们传入一个dict作为headers参数:

    r = requests.get('https://www.douban.com/', headers={'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit'})
    print(r.text)
    # 结果
    '<!DOCTYPE html>\n<html>\n<head>\n<meta charset="UTF-8">\n <title>豆瓣(手机版)</title>...'
    
    

    通过发送POST请求,只需要把get()方法变成post(),然后传入data参数作为POST请求的数据:

     r = requests.post('https://accounts.douban.com/login', data={'form_email': 'abc@example.com', 'form_password': '123456'})
    
    

    requests默认使用 application/x-www-form-urlencoded 对POST数据编码。如果要传递JSON数据,可以直接传入json参数:

    params = {'key': 'value'}
    r = requests.post(url, json=params) # 内部自动序列化为JSON
    
    

    要指定超时,传入以秒为单位的timeout参数:

    r = requests.get(url, timeout=2.5) # 2.5秒后超时
    

    异常处理

    关于reqeusts的异常在这里可以查看详细内容:
    http://www.python-requests.org/en/master/api/#exceptions
    所有的异常都是在requests.excepitons中

    结尾

    网络爬虫的基础篇就介绍到这,想了解更多可关注我们社群【数据蛙】,也可在下方评论区留言。

    从事任何职业都是一个工具,不是一首歌、不是一个节目,而是态度。

    相关文章

      网友评论

        本文标题:网络爬虫入门(三)之 Requests库的基本使用

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