美文网首页数据蛙数据分析每周作业
网络爬虫入门(三)之 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