Python3网络爬虫——三、Requests库的基本使用

一、什么是Requests

  Requests是用Python语言编写,基于urllib,采用Apache2 Licensed开元协议的HTTP库。它比urllib更加的方便,可以节约我们大量的工作完全满足HTTP测试需求。简单来讲,即Python实现的简单易用的HTTP库。

二、Requests库的安装

  如果是初学者,建议使用原生Python3进行安装。

1 >> pip3 install requests

  如果有一定的Python基础(会基本语法即可),使用anaconda进行安装更加方便,可以避免一些版本问题,毕竟Python2和Python3是两种不同的语言(高级黑(⊙﹏⊙)b)。

1 >> conda install requests

三、常用方法

  首先来感受一下Requests的方便之处。

1 import requests
2
3 response = requests.get(‘http://www.baidu.com‘)
4
5 print(response.status_code)
6 print(response.text)
7 print(type(response.text))
8 print(response.cookies)

  运行代码,可以看到response的类型为str类型,即我们不需要再用decode方法进行转码,其次可以直接获得cookie对象。

1 import requests
2
3 requests.post(‘http://httpbin.org/post‘)
4 requests.put(‘http://httpbin.org/put‘)
5 requests.options(‘http://httpbin.org/get‘)

  可以看到我们可以方便的进行各种请求。httpbin.org是一个http验证网址。下面看一下常用的一些方法。

  • 普通的get请求
 1 import requests
 2
 3 response = requests.get(‘http://httpbin.org/get‘)
 4 print(response.text)
 5 ‘‘‘
 6 {
 7   "args": {},
 8   "headers": {
 9     "Accept": "*/*",
10     "Accept-Encoding": "gzip, deflate",
11     "Connection": "close",
12     "Host": "httpbin.org",
13     "User-Agent": "python-requests/2.14.2"
14   },
15   "origin": "127.0.0.1",
16   "url": "http://httpbin.org/get"
17 }
18 ‘‘‘

  这是最简单的get请求,可以看一下返回结果(‘‘‘ ‘‘‘内的字符串)。是以字典形式返回的结果。注:没有使用代理,为了防止恶意的IP攻击,将origin的值修改了下,实际返回的是请求的IP地址。

  • 带参数的get请求
 1 import requests
 2
 3 data = {
 4     ‘name‘:‘zhangsan‘,
 5     ‘age‘:22
 6 }
 7 response = requests.get(‘http://httpbin.org/get‘,params=data)
 8 print(response.text)
 9 ‘‘‘
10 {
11   "args": {
12     "age": "22",
13     "name": "zhangsan"
14   },
15   "headers": {
16     "Accept": "*/*",
17     "Accept-Encoding": "gzip, deflate",
18     "Connection": "close",
19     "Host": "httpbin.org",
20     "User-Agent": "python-requests/2.14.2"
21   },
22   "origin": "127.0.0.1",
23   "url": "http://httpbin.org/get?name=zhangsan&age=22"
24 }
25 ‘‘‘

  我们可以构造一个字典,传给params参数,这样就可以向服务器发送参数,从url参数可以看出,效果相当于utl?name=zhangsan&age=22。

  • 解析json
 1 import requests
 2 import json
 3
 4 response = requests.get(‘http://httpbin.org/get‘)
 5 print(response.json()) # 等同于 json.loads(response)
 6 print(type(response.json()))
 7
 8 ‘‘‘
 9 {‘args‘: {}, ‘headers‘: {‘Accept‘: ‘*/*‘, ‘Accept-Encoding‘: ‘gzip
10 , deflate‘, ‘Connection‘: ‘close‘, ‘Host‘: ‘httpbin.org‘, ‘User-Ag
11 ent‘: ‘python-requests/2.14.2‘}, ‘origin‘: ‘113.128.88.6‘, ‘url‘:
12 ‘http://httpbin.org/get‘}
13 <class ‘dict‘>
14 ‘‘‘

  这样返回的数据就被转换成了json格式,类型为字典类型 。

  • 二进制数据
1 import requests
2
3 response = requests.get(‘http://github.com/favicon.ico‘)
4 with open(r‘F:\favicon.ico‘,‘wb‘) as f:
5     f.write(response.content)

  以上将一张图片保存到本地的过程。

1 >>> print(type(response.text))
2 <class ‘str‘>
3 >>> print(type(response.content))
4 <class ‘bytes‘>

  可以看出text和content的区别。content的内容为二进制数据,所以想要进行存储时,保存的是其二进制数据。

  • 添加headers
1 import requests
2
3 headers = {
4   ‘User-Agent‘:‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.36‘
5 }
6
7 response = requests.get(‘http://www.zhihu.com/explore‘,headers=headers)
  • post请求
 1 import requests
 2
 3 data = {‘name‘:‘zhangsan‘,‘age‘:‘22‘}
 4 response = requests.post(‘http://httpbin.org/post‘,data=data)
 5 print(response.text)
 6
 7 ‘‘‘
 8 {
 9   "args": {},
10   "data": "",
11   "files": {},
12   "form": {
13     "age": "22",
14     "name": "zhangsan"
15   },
16   "headers": {
17     "Accept": "*/*",
18     "Accept-Encoding": "gzip, deflate",
19     "Connection": "close",
20     "Content-Length": "20",
21     "Content-Type": "application/x-www-form-urlencoded",
22     "Host": "httpbin.org",
23     "User-Agent": "python-requests/2.14.2"
24   },
25   "json": null,
26   "origin": "127.0.0.1",
27   "url": "http://httpbin.org/post"
28 }
29 ‘‘‘

  可以看到,data参数接收的数据,将以表单的形式进行提交。

  • file提交
1 import requests
2
3 files = {‘file‘:open(r‘F:\favicon.ico‘,‘rb‘)}
4 response = requests.post(‘http://httpbin.org/post‘,files=files)

  运行代码,就会看到在key=file的值为该本地图片的二进制代码。

  • 获取cookie并输出
1 import requests
2
3 response = requests.get(‘https://www.baidu.com‘)
4 for key,value in response.cookies.items():
5     print(key + ‘ = ‘ + value)
6
7 # BDORZ = 27315

  通过这种方式可以获得cookie的具体信息。

  • 会话维持

  我们获取cookie信息是为了维持会话,下面的例子用到了http测试网址的特性,即我们先通过url进行cookie的设置,然后通过访问服务器获取cookie。

 1 import requests
 2
 3 requests.get(‘http://httpbin.org/cookies/set/name/zhangsan‘)
 4 response = requests.get(‘http://httpbin.org/cookies‘)
 5 print(response.text)
 6
 7 ‘‘‘
 8 {
 9   "cookies": {}
10 }
11 ‘‘‘

  这时我们看到,cookies信息为空。这是因为我们通过以上方式进行测试,相当于进行了两次独立的请求(可以想象成用两个浏览器进行请求),因为第一次设置的cookie在第二次访问中并拿不到,所以我们需要会话维持。

 1 import requests
 2
 3 s = requests.Session()
 4 print(type(s)) # <class ‘requests.sessions.Session‘>
 5
 6 s.get(‘http://httpbin.org/cookies/set/name/zhangsan‘)
 7 response = s.get(‘http://httpbin.org/cookies‘)
 8 print(response.text)
 9
10 ‘‘‘
11 {
12   "cookies": {
13     "name": "zhangsan"
14   }
15 }
16 ‘‘‘

  通过session对象我们就可以实现会话维持。

  • SSL证书验证问题
1 import requests
2
3 response = requests.get(‘http://www.12306.cn‘)
4
5 ‘‘‘
6 raise SSLError(e, request=request)
7 requests.exceptions.SSLError: ("bad handshake: Error([(‘SSL routin
8 es‘, ‘ssl3_get_server_certificate‘, ‘certificate verify failed‘)],
9 ‘‘‘

  https进行了网站的安全验证,因此当我们访问一个没有SSL证书的网址时会抛出SSL错误。为了解决这个问题,需要进行参数设置。

1 import requests
2 from requests.packages import urllib3
3 urllib3.disable_warnings() # 消除警告信息
4
5 response  =requests.get(‘https://www.12306.cn‘,verify=false)

  这样就可以成功的返回网页。

 1 import requests
 2 from requests.exceptions import ReadTimeout,HTTPError,RequestException
 3
 4 try:
 5     response = requests.get(‘http://www.baidu.com‘,timeout=0.01)
 6     print(response.status_code)
 7 except ReadTimeout:
 8     print(‘Timeout‘)
 9 except HTTPError:
10     print(‘http error‘)
11 except RequestException:
12     print(‘Error‘)
13
14 # Timeout

  可以点开异常处理的链接查看官方文档,Requests库封装了很多异常处理的class。

  YouTube学习视频(Elnino Chen老师):https://www.youtube.com/channel/UC0gXu_5GOwzAaxkFymbwRhg

时间: 2024-10-24 19:25:07

Python3网络爬虫——三、Requests库的基本使用的相关文章

python3网络爬虫学习——基本库的使用(1)

最近入手学习Python3的网络爬虫开发方向,入手的教材是崔庆才的<python3网络爬虫开发实战>,作为温故所学的内容同时也是分享自己操作时的一些经验与困惑,所以开了这个日记,也算是监督自己去学习.在这一系列的日记中我也会随时加上一些书中没有的内容作为对所学知识的一个补充. (1)使用urllib库 在python3中,把python2的urllib和urllib2两个库合并了,同时作为了其内置的HTTP请求库,不需要额外安装,这个库包括四个模块 request:最基本的HTTP请求模块,可

python网络爬虫之requests库

Requests库是用Python编写的HTTP客户端.Requests库比urlopen更加方便.可以节约大量的中间处理过程,从而直接抓取网页数据.来看下具体的例子: def request_function_try():     headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0'}     r=requests.get(url="http://www

Python3网络爬虫(三):urllib.error异常

运行平台:Windows Python版本:Python3.x IDE:Sublime text3 转载请注明作者和出处:http://blog.csdn.net/c406495762/article/details/59488464 一.urllib.error urllib.error可以接收有urllib.request产生的异常.urllib.error有两个方法,URLError和HTTPError.如下图所示: URLError是OSError的一个子类,HTTPError是URLE

python3网络爬虫学习——基本库的使用(2)

2.request 首先上实例 import urllib.request request = urllib.request.Request('https://python.org') response = urllib.request.urlopen(request) print(response.read().decode('utf-8')) 与之前一样生成了python官网的内容,但这次我们构造的是一个Request类,我们可以将请求独立成一个对象,也可以配置参数 class.urllib

Python3网络爬虫(七):使用Beautiful Soup爬取小说

转载请注明作者和出处:http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 一.Beautiful Soup简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能.它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简

python3网络爬虫系统学习:第一讲 基本库urllib

在python3中爬虫常用基本库为urllib以及requests 本文主要描述urllib的相关内容 urllib包含四个模块:requests——模拟发送请求 error——异常处理模块 parse——关于URL处理方法的工具模块 robotparser——通过识别网站robot.txt判断网站的可爬取内容 一.发送请求 urllib库发送请求主要使用request模块中的两个内容:urlopen()方法以及Requests类,其中Requests类是结合urlopen()方法来使用的. 首

Python3网络爬虫(十):这个帅哥、肌肉男横行的世界(爬取帅哥图)

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> Python3网络爬虫(十):这个帅哥.肌肉男横行的世界(爬取帅哥图) - Jack-Cui - 博客频道 - CSDN.NET Jack-Cui 努力-是为了将运气成分降到最低 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯

爬虫学习 06.Python网络爬虫之requests模块(2)

爬虫学习 06.Python网络爬虫之requests模块(2) 今日内容 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 知识点回顾 xpath的解析流程 bs4的解析流程 常用xpath表达式 常用bs4解析方法 了解cookie和session - 无状态的http协议 如上图所示,HTTP协议 是无状态的协议,用户浏览服务器上的内容,只需要发送页面请求,服务器返回内容.对于服务器来说,并不关心,也并不知道是哪个用户的请求.对于一般浏览性的网页来说

Python3网络爬虫(八):爱奇艺等主流视频网站的VIP视频破解(在线观看+视频下载)

转载请注明作者和出处:http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 一.前言 没有会员,想在线观看或下载爱奇艺.PPTV.优酷.网易公开课.腾讯视频.搜狐视频.乐视.土豆.A站.B站等主流视频网站的VIP视频?又不想充会员怎么办?博主本次写的VIP视频破解助手也许可以帮你解决烦恼. 二.软件使用说明 1.软件下载 软件运行平台:Windows 注意:该软件已经打包成exe可