Python爬虫(3)- Requests库

Python版本:Python 3.X
Requests库官方文档:https://pypi.python.org/pypi/requests

Introduction

Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库。如果你看过 Python爬虫(2) 关于urllib库的使用,你会发现,其实urllib还是非常不方便的,而Requests它会比urllib更加方便,可以节约我们大量的工作。(用了requests之后,你基本都不愿意用urllib了)一句话,requests是python实现的最简单易用的HTTP库,建议爬虫使用requests库。

默认安装好python之后,是没有安装requests模块的,需要单独通过pip安装。但是国内使用pip容易撞墙,推荐下载requests轮子。这里有个http://www.lfd.uci.edu/~gohlke/pythonlibs网站里面有各种各样的轮子,ctrl+f找到requests后,下载zip格式的轮子,解压后把requests文件夹放到Python的lib文件夹里就可以了。这时运行import requests,有可能提示你没这个库没那个库的,这时因为requests库还用到了其他的库,同样从那个网站里找到相应的库依次放到lib文件夹里就好。

总体演示

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.text会出现乱码,所以用response.content,这返回的是二进制格式,用decode('utf-8')转换。

各种请求方式

requests.post("http://httpbin.org/post")
requests.put("http://httpbin.org/put")
requests.delete("http://httpbin.org/delete")
requests.head("http://httpbin.org/get")
requests.options("http://httpbin.org/get")

GET请求

get请求可以不带参数只有URL,也可以携带params为data的参数。如果我们想要在URL查询字符串传递数据,通常我们会通过httpbin.org/get?key=val方式传递。Requests模块允许使用params关键字传递参数,以一个字典来传递这些参数,例子如下:

import requests
data = {
    "name":"zhaofan",
    "age":22
}
response = requests.get("http://httpbin.org/get",params=data)
print(response.url)
print(response.text)

解析json

import requests
import json
 
response = requests.get("http://httpbin.org/get")
print(type(response.text))
print(response.json())
print(json.loads(response.text))
print(type(response.json()))

从结果可以看出requests里面集成的json其实就是执行了json.loads()方法,两者的结果是一样的。

添加headers
和前面我们将urllib模块的时候一样,我们同样可以定制headers的信息,如当我们直接通过requests请求知乎网站的时候,默认是无法访问的。因为访问知乎需要头部信息,这个时候我们在谷歌浏览器里输入chrome://version,就可以看到用户代理,将用户代理添加到头部信息:

Python爬虫(3)- Requests库_第1张图片
image.png

这样子就可以正常访问了:

import requests
headers = {
 
    "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
}
response =requests.get("https://www.zhihu.com",headers=headers)
 
print(response.text)

POST请求

通过在发送post请求时添加一个data参数,这个data参数可以通过字典构造成,这样对于发送post请求就非常方便。

import requests
 
data = {
    "name":"jamesqiu",
    "age":19
}
response = requests.post("http://httpbin.org/post",data=data)
print(response.text)

响应

import requests
 
response= requests.get(" 
if response.status_code == requests.codes.ok:    
    print("Access Successfully!")

requests的高级用法

文件上传

import requests
files= {"files":open("git.jpeg","rb")}
response = requests.post("url", files=files)
print(response.text)

获取cookie

response = requests.get("http://www.baidu.com")
print(response.cookies)
for key,value in response.cookies.items():
    print(key+"="+value)

Cookie的一个作用就是会话维持:

import requests
s = requests.Session()
s.get("http://httpbin.org/cookies/set/number/123456")
response = s.get("http://httpbin.org/cookies")
print(response.text)

证书验证

现在的很多网站都是https的方式访问,所以这个时候就涉及到证书的问题。解决方法为:

import requestsfrom requests.packages import urllib3
urllib3.disable_warnings()
response = requests.get(" 
print(response.status_code)

这样就不会提示警告信息,当然也可以通过cert参数放入证书路径。

代理设置

proxies= {
    "http":"http://127.0.0.1:9999",
    "https":"http://127.0.0.1:8888"
}
response  = requests.get("https://www.baidu.com",proxies=proxies)
print(response.text)

如果代理需要密码,则

proxies ={"http":"http://user:[email protected]:9999"}

其他

另外还有设置timeout参数,认证设置(有的网站需要认证,可以通过requests.auth模块实现:参数auth=HTTPBasicAuth),异常处理等。

你可能感兴趣的:(Python爬虫(3)- Requests库)