安装方法:pip install requests
使用requests库以前,咱们须要先导入requests模块:html
语法 :import requests
首先介绍一下requests库的主要方法:
一、requests.request(),构造一个请求,其余全部的爬虫方法都是在该方法的基础上衍生出来的。web
语法:requests.request(method,url,**kwargs) 参数说明: method:请求方式,包含get、post、put等几种方式。 url:指获取页面的url连接。 **kwargs:控制访问的参数,总共13个。经常使用的相似params、headers、proxies等。 example: import requests response = requests.request("get","http://www.baidu.com") print(response.text) 打印结果(只截取内容的一部分): <!DOCTYPE html> <!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8> ...
二、requests.get():获取http的主要方法,对应http的"get"。json
会和requests.post()方法一块儿在后面详细介绍,由于这两种方法使咱们之后经常使用的。
三、requests.head():获取html网页头信息的方法。api
example: import requests response = requests.head("http://www.baidu.com") print(response.headers) 打印结果: {'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Connection': 'Keep-Alive', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html', 'Date': 'Fri, 05 Apr 2019 00:46:15 GMT', 'Last-Modified': 'Mon, 13 Jun 2016 02:50:01 GMT', 'Pragma': 'no-cache', 'Server': 'bfe/1.0.8.18'}
四、requests.put():向html页面提交put请求的方法,做为了解便可。
五、requests.patch():向html页面提交局部修改请求,做为了解便可。
六、requests.delete():向html提交删除请求,做为了解便可。浏览器
下面重点介绍一下get与post方法:服务器
科普一下用到的几个小概念:
一、http协议网络
超文本传输协议,英文缩写:HyperText Transfer Protoco。http是一个基于"请求与响应" 模式的,无状态的应用层协议。其中的无状态指的是第一次请求与第二次请求之间没有任何关联 ,说白了就是客户端发送一次请求,服务器就返回一次结果,即便你连续作了一百次请求,可是 服务器并不记得你是谁,咱们现用的大多数浏览器都是采用http协议。
二、URLapp
统一资源定位符,英文全称:uniform resources location。http协议采用url做为定位网络资源的标识。 书写格式: http://host[:port][path] host:合法的internet主机域名或ip地址。 port:端口号,缺省值为80. path:资源路径。
三、网页请求几个常见的状态码框架
200:表示请求成功。 300:表示重定向。 400:客户端请求语法错误,服务端没法理解。 401:要求用户进行身份验证。 403:服务器理解客户端请求,可是拒绝执行。 404:找不到网页资源。 500:服务器内部错误,没法完成请求。 更多请访问:https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81/5053660?fr=aladdin
1、requests.get()方法
语法格式:
response = request.get(url,**kwargs)svg
语法解析: request.get(url,**kwargs) :构造一个向服务器发送请求的request对象 response:返回一个包含服务器资源response对象。 返回的response 对象主要有如下五个属性: 一、r.status_code:http请求的返回状态。 二、r.text:http响应的字符串形式,即url对应的网页内容。 三、r.encoding:从http-header中猜想的响应内容编码格式。从headers中的charset 寻求参数,若是不存在charset 参数,则默认编码为:ISO-8859-1 四、r.apparentt_encoding:从内容分析出响应编码格式。 五、r.content:http响应的二进制形式,通常爬取图片,而后保存到某文件中。 爬取网页的通用代码块: import requests def getHtmlText(url): try: #g构造请求并获取响应 r = requests.get(url,timeout=30) #raise_for_status():该方法表示若是状态码不是200,则抛出HttpError异常 r.raise_for_status() #通常状况下经过网页内容分析出的编码格式更为准确,全部咱们将获取的响应编码格式改成apparent_cencoding r.encoding = r.apparent_encoding #返回网页信息 return r.text except: return "产生异常!" if __name__=="__main__": url = "http://www.baidu.com" print(getHtmlText(url)) 打印结果(截取了其中一部分): <!DOCTYPE html> <html> <head><meta http-equiv=content-type content=text/html;char...
通常状况下,网页爬取都没那么容易,由于网站都设有反爬机制,这个时候咱们须要经过修改咱们的请求进行假装,才不会被拦截。经常使用的两个方法:
一、设置请求头
①设置User-Agent example: import requests header = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"} r = requests.get('https://www.cnblogs.com/xueweihan/p/4592212.html',headers=header) print(r.text) ②设置Referer:表示请求从哪里来 example: import requests url = 'http:///api/user/all_stu' header = { 'Referer':'http://api.nnzhp.cn/' } req = requests.get(url,headers = header) print(req.json())
二、设置代理
import requests url = "http://www.jd.com" proxies= { "http":"http://127.0.0.1:8888", "https":"https://127.0.0.1:8888", } r = requests.get(url,proxies=proxies) print(r.text)
参数的传递,例如爬取某须要用户名和密码的网站。
import requests url = "http://www.zhihu.com" params= { "username":"zhangsan", "password":"123456", } r = requests.get(url,params) print(r.text) 注意:参数中的"username"和"password" 并不是固定的,须要查看网页登录输入框的name属性值。
requests库的常见异常
一、requests.ConnectionError:网络链接异常,如DNS查询失败,拒绝链接等 二、requests.HttpError:http错误异常。 三、requests.UrlRequired:url缺失异常,即咱们访问的url不存在。 四、requests.TooManyRedirects:超过最大重定向次数,产生重定向异常。 五、requests.ConnectTimeout:链接远程服务器超时异常。 六、requests.Timeout:请求url超时异常。 注:5和6 的区别在于5是链接服务器时间超时,6指的是发送请求到获取内容这段时间是否超时。
上面只是写了一小部分经常使用的东西,由于requests用到的时候很少,基本都是使用爬虫框架去作,本人知识水平也有限,就写这么多吧,但愿对你有帮助。