requeste的使用

准备工作

安装requests库

pip install requests

初步使用

获取网页信息直接采用 get() 方法

import requests

#get方法发送网址)

res=requests.get('https://www.csdn.net')

#查看它的类

print(type(r))

#查看状态码

print(r.status_code)

#从HTTP header中猜测的响应内容编码方式

print(r.encoding)

 

#打印响应内容类型

print(type(r.text))

#HTTP响应内容的字符串形式

print(r.text)

 

#打印cookie

print(r.cookies)

HTTP请求

GET请求

使用 get() 方法主要用来获取网页信息,就像我们在浏览器里面输入内容然后获得信息。

基本上没有什么限制,像一些需要登陆后保持Cookies的情况先不说,但是也要满足网站的要求,比如很多网站都需要加上headers信息才能访问,这样能伪装成浏览器

import requests

headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36'
}
r = requests.get('https://www.zhihu.com', headers=headers)
print(r.status_code)
print(r.text)

可以直接获取到主页信息,User-Agent字段信息,也就是浏览器标识信息。如果不加这个,知乎会禁止抓取。一般情况下,使用 get() 方法时只要注意好headers信息就好了,针对网站所需要的信息适当选取内容。

对于params参数,就是请求时附加的额外信息。

比如,假设要添加两个参数username为name、password为pwd,可以把链接进行更改:http://httpbin.org/get?username=name&password=pwd,与 post() 的data参数是类似的
POST请求

使用 post() 方法主要是附加数据再提交,比如表单信息或JSON数据,把信息放在data参数里面。

可以请求http://httpbin.org/post来看一下情况,该网站会判断如果客户端发起的是POST请求的话,它返回相应的请求信息

import requests

data = {'page': 1, 'pwd': s}

r = requests.post("http://httpbin.org/post", data=data)

发送JSON数据:
import json
import requests

payload = {'page': 1, 'pwd': 's'}

r = requests.post("http://httpbin.org/post", data=json.dumps(payload))

print(r.text)

Cookies

如果某个响应包含一些 cookie,可以直接访问它们,比如:

如果在一个响应中包含了cookie,那么可以利用cookies属性拿到这个返回的cookie值:

  1. import requests 
  2. url = "http://www.renren.com/PLogin.do"
    data = {"email":"970138074@qq.com",'password':"pythonspider"}
  3. resp = requests.get('http://www.baidu.com/')
  4. print(resp.cookies)
  5. print(resp.cookies.get_dict()) 

要想发送 cookies 到服务器,可以使用 cookies 参数:

import requests

url = 'http://httpbin.org/cookies'

cookies = dict(cookies_are='working')
r = requests.get(url, cookies=cookies)

 

超时

可以告诉 requests 在经过以 timeout 参数设定的秒数时间之后停止等待响应。基本上所有的生产代码都应该使用这一参数。如果不使用,程序可能会永远失去响应:

requests.get('http://github.com', timeout=0.001)

session:

之前使用urllib库,是可以使用opener发送多个请求,多个请求之间是可以共享cookie的。那么如果使用requests,也要达到共享cookie的目的,那么可以使用requests库给我们提供的session对象。注意,这里的session不是web开发中的那个session,这个地方只是一个会话的对象而已。还是以登录人人网为例,使用requests来实现。示例代码如下:

import requests

url = "http://www.renren.com/PLogin.do"

data = {"email":"970138074@qq.com",'password':"pythonspider"}

headers = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"}

# 登录

session = requests.session()

session.post(url,data=data,headers=headers)

# 访问大鹏个人中心

resp = session.get('http://www.renren.com/880151247/profile')

print(resp.text)

使用代理:

使用requests添加代理也非常简单,只要在请求的方法中(比如get或者post)传递proxies参数就可以了。示例代码如下:

import requests

url = "http://httpbin.org/get"

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36',}

proxy = {'http': '171.14.209.180:27829'} 

resp = requests.get(url,headers=headers,proxies=proxy)

 

 
 

 

posted on 2019-12-04 16:12  zfj822  阅读(619)  评论(0编辑  收藏  举报