爬虫笔记1-Requests库的基本方法
目标:掌握定向网络数据爬取和网页解析的基本能力
课程设置.png
◆1◆ requests库的7种主要方法
方法 | 说明 |
---|---|
requests.request() | 构造一个请求,支撑以下各方法的基础方法 |
requests.get() | 获取HTML网页的主要方法,对应于HTTP的GET |
requests.head() | 获取HTML网页头信息的方法,对应于HTTP的HEAD |
requests.post() | 向HTML网页提交POST请求,对应于HTTP的POST |
requests.put() | 向HTML网页提交PUT请求,对用于HTTP的PUT |
requests.patch() | 向HTML网页提交局部修改请求,对应于HTTP的PATCH |
requests.delete() | 向HTML网页提交删除请求,对应于HTTP的DELETE |
◆ requests.get()方法
r = requests.get(url)
构造一个向服务器请求的Request(大写)对象,返回一个包含服务器资源的Response(大写)对象,用变量r表示。
其完整使用方法为:
requests.get(url,params=None,**kwargs)
- url:拟获取页面的url链接
- params:url中的额外参数,字典或字节流格式,可选
- **kwargs:12个控制访问的参数
import requests
r = requests.get('http://www.baidu.com')
print(r.status_code) # 状态码,200表示访问正常
print(type(r)) # 可以看到Response为一个类
print(r.headers) # 获取头部信息
输出:
200
<class 'requests.models.Response'>
{'Server': 'bfe/1.0.8.18', 'Date': 'Sat, 06 Jan
2018 07:42:41 GMT', 'Content-Type':
**kwargs:12个控制访问的参数(参考)
参数1 params
params指能够增加到url中的参数
>>> import requests
>>> kv = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.request('GET', 'http://python123.io/ws', params = kv)
>>> print(r.url)
https://python123.io/ws?key1=value1&key2=value2
在给定的url中后面多了一个问号,问号后面key1=value1,&key2=value2
。通过parame参数,我们可以把一些键值对增加到url中,然后再去访问,服务器根据这些参数筛选部分资源返回。
参数2 data
data,它可以是字典、字节序列或文件对象,作为向服务器提供或提交资源时使用。
参数3 json
json格式是http协议使用的最经常使用的数据格式,作为内容部分可以向服务器提交,比如说用字典构造一个键值对,可以把它复制给json参数,那么这个键值对就复制到服务器的json里面。
>>> kv = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.request('POST', 'http://python123.io/ws', json= kv)
参数4 headers
headers实际上是http头的相关语句,它对应了向某一个url访问时所发起的http的头字段,可以用这个字,来定制访问某一个url的http的协议头,举个例子:
>>> hd = {'user-agent': 'Chrome/10'}
>>> r = requests.request('POST', 'http://python123.io/ws', headers = hd)
把user-agent变为Chrome/10,那么在访问某一个链接时,我们可以把这样的字段赋给headers,此时headers再去向服务器访问时服务器看到的user-agent字段就是Chrome/10
参数5 cookies 和 auth
cookies和auth都是requests库的高级功能。
cookies指的是从http协议中解析cookie, 它可以是字典,也可以是CookieJar形式。
auth字段是一个元组类型,它是支持http认证功能的
参数6 files
顾名思义,它是向服务器传输文件时使用的字段。我们可以定义一个字典,用File,以对应的文件为键值对,用open的方式打开这个文件,并把这个文件与files做一个关联,同时对应到相关的url上。通过这样的方法,我们可以向某一个链接提交某一个文件,这个在特定应用时还是非常有用的。
>>> fs = {'file': open('data.txt', 'rb')}
>>> r = requests.request('POST', 'http://python123.io/ws', files= fs)
>>>
参数7 timeout
Timeout设定的超时时间,以秒为单位。当我们发起一个get请求时,我们可以设一个timeout时间,如果在timeout时间内,我们的请求内容没有反馈回来,那么它将产生一个timeout的异常。
>>> r = requests.request('POST', 'http://python123.io/ws', timeout= 10)
>>>
参数8 Proxies
Proxies字段,他是一个字典类型,可以为我们爬取网页,设定相关的访问代理服务器。这里我们增加两个代理:
>>> pxs = {'http': 'http://user:pass@10.10.10.10:1234''https': 'https://10.10.10.10:4321'
>>> r = requests.request('GET', 'http://www.baidu.com', proxies= pxs)
>>>
第一个是http访问时使用的代理,在这代理中,我们可以增加用户名跟密码的设置。后面是一个https的代理服务器,这样我们在访问百度时的ip地址,就是代理服务器的ip地址。使用这个字段可以有效的隐藏用户爬取网页的源的ip地址信息,能够有效地防止对爬虫的逆追踪
其他参数
allow_redirects 和 stream
这两个字段都是开关字段。
allow_redirects表示允不允许对url进行重定向。
stream指对获取的内容是否进行立即下载,默认情况是立即下载。
verify 和 cert
verify是一个认证ssl证书的字段。
cert是保存本地ssl证书路径的字段。
Response的5个属性
方法 | 说明 |
---|---|
r.status_code | HTTP请求的返回状态,200表示连接成功 |
r.text | HTTP相应内容的字符串形式即url对应的页面内容 |
r.encoding | 从HTTPheader中猜测的相应内容编码方式 |
r.apparent_encoding | 从内容中分析的响应内容编码方式 |
r.content | HTTP响应内容的二进制形式 |
r.encoding:如果header中不存在charset,则认为编码为ISO-8859-1
requests库常用的6种连接异常
requests库的异常
爬取网页的通用代码框架
import requests
def getHTMLText(url):try:r = requests.get(url, timeout=30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return '产生异常'if __name__ == '__main__':url = 'http://www.baidu.com'print(getHTMLText(url))
raise_for_status()方法
Response类提供了一个raise_for_status()方法,能够判断返回的Response类型状态是不是200。如果是200,他将表示返回的内容是正确的,如果不是200,他就会产生一个异常。
◆ requests.head()方法
>>> import requests
>>> r = requests.head('http://www.cnblogs.com/zhang-anan/')
>>> r.headers
{'Date': 'Sun, 07 Jan 2018 08:21:35 GMT', 'Content-Type': 'text/html; charset=utf-8', 'Connection': 'keep-alive', 'Vary': 'Accept-Encoding', 'Cache-Control': 'private, max-age=10', 'Expires': 'Sun, 07 Jan 2018
08:21:45 GMT', 'Last-Modified': 'Sun, 07 Jan 2018 08:21:35 GMT', 'X-UA Compatible': 'IE=10', 'X-Frame-Options': 'SAMEORIGIN', 'Content-Encoding': 'gzip'}
>>> r.text
''
通过requests.head()方法可以较少流量获取网页资源的概要信息。
◆2◆ HTTP协议对资源的操作
HTTP协议对资源的操作
HTTP(HyperText Transfer Protocol)指的是超文本传输协议。超文本传输协议是一种基于请求与响应模式的无状态的应用层协议。
- 请求与响应模式:用户发起请求,服务器做相关响应。
- 无状态:指的是第一次请求,跟第二次请求之间,并没有相关的关联。
- 应用层协议:指的是该协议工作在tcp协议之上
作者:有雨敲窗2017
链接:https://www.jianshu.com/p/1b0cc1a954a8
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
爬虫笔记1-Requests库的基本方法相关推荐
- Python 网络爬虫笔记1 -- Requests库
Python 网络爬虫笔记1 – Requests库 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Pyt ...
- Python 网络爬虫笔记2 -- Requests库实战
Python 网络爬虫笔记2 – Requests库实战 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:P ...
- 爬虫笔记:Requests库详解
什么是Requests 之前讲解了爬虫笔记:Urllib库详解发现确实有不方便的地方,比如加一个代理,cookie,发送post请求比较繁琐. Request库能用几句话实现这些. Requests ...
- 爬虫笔记(一)——Requests库
文章目录 写在前面 一.Requests库入门 1.Requests库的安装 (1)安装Requests库 (2)测试Requests库 2.Requests库的get()方法 (1) get()方法 ...
- post提交调用的却是doget方法_Python基础教程 | Requests库的使用方法和细节
下面我就给大家整理了Requests库的使用方法和细节. 什么是Requests Requests是Python语言编写,基于urllib3,采用Apache2 Licensed开源协议的HTTP库. ...
- 从零开始写Python爬虫---1.1 requests库的安装与使用
什么是爬虫? 爬虫本质上是模拟人浏览信息的过程,只不过他通过计算机来达到快速抓取筛选信息的目的.所以我们想要写一个爬虫,最基本的就是要将我们需要抓取信息的网页原原本本的抓取下来.这个时候就要用到req ...
- 爬虫系统基础框架 何时使用爬虫框架? requests库 + bs4来实现简单爬虫
转载请注明出处https://www.cnblogs.com/alexlee666/p/10180519.html,谢谢! 文中图片来自于我的简书博客. 一. 爬虫用途和本质: 网络爬虫顾名思义即模仿 ...
- python怎么安装requests库-Python3.6安装及引入Requests库的实现方法
本博客可能没有那么规范,环境之类的配置.只是让你直接开始编程写python. 至于各种配置网络上有多种方法. 本文仅代表我的观点的一种方法. 电脑环境:win10 64位 第一步:下载python. ...
- python用代码安装3.6_Python3.6安装及引入Requests库的实现方法
本博客可能没有那么规范,环境之类的配置.只是让你直接开始编程写python. 至于各种配置网络上有多种方法. 本文仅代表我的观点的一种方法. 电脑环境:win10 64位 第一步:下载python. ...
- Python学习笔记:requests库
Python学习笔记:requests库 利用requests这个功能强大的网络请求库,可以像浏览器一样发送各种HTTP请求来获取网站的数据. 一.运行环境 1.系统版本:Windows 10 2.P ...
最新文章
- ASP.NET中的加密方法介绍
- shell相关测验题
- OpenCASCADE:常用Inspector控件之3D 视图
- linux中/etc/passwd文件与/etc/shadow文件解析
- 通过一个实际例子学习SAP UI5的控件绘制和渲染
- 判断集合相等_数学启蒙的每个关键阶段之集合分类
- bzoj 4320: ShangHai2006 Homework
- LD_PRELOAD用法总结
- jquery比较时间大小
- DM7数据库ODBC的配置详解
- 锐捷交换机常用命令速查
- 使用Struts之ActionForm
- #10098. 「一本通 3.6 例 1」分离的路径
- java 感想_Java课程感想
- java使用java.lang.Math类,生成100个0-99之间的随机整数,并找出它们中间的最大值和最小值,并统计大于50的整数的个数。打印3次运行结果,看是否相同。
- 浙大竺可桢学院混合班计算机专业,起底黄峥毕业的浙大混合班:学霸不算牛 个个是学神...
- 1.贝尔曼方程(Bellman equation)
- linux发行版本排行,2020年10种最受欢迎的Linux发行版排名
- 交互设计期末大作业(Photoshop期末作业)
- 继承者的难题:李在镕能否接班三星?