Python爬虫之requests库

Python网络爬虫之requests库

安装方法: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用到的时候很少,基本都是使用爬虫框架去作,本人知识水平也有限,就写这么多吧,但愿对你有帮助。