爬虫笔记(二):Requests库的基本使用

介绍

Requests库是基于urllib编写,功能上能够替代urllib,使用上比urllib方便,需要独立pip安装

基本用法

响应的基本内容
import requests

response = requests.get("http://www.baidu.com")

print(response.status_code) #状态码
print(response.url) #请求地址
print(response.headers) #头部信息
print(response.cookies) #cookie信息
print(response.text) #文本形式打印响应内容
print(response.content) #字节流形式打印相应内容

#### 各种请求方式

requests.post("http://httpbin.org/post")
requests.put("http://httpbin.org/put")
requests.delete("http://httpbin.org/delete") #删除资源
requests.head("http://httpbin.org/head") #查看头部信息
requests.options("http://httpbin.org/options")
GET请求

发起GET请求有两种,一种是直接把参数的键值对写在url中调用,另一种是通过params字段来传递

# 第一种方式
response = requests.get("http://httpbin.org/get?key=value")

# 第二种方式
data = {
    "key" : "value"
}
response = requests.get("http://httpbin.org/get", params=data)
POST请求

发起POST请求和GET请求的第二种方式很类似,只不过传参数的字段变成了data

data = {
    "key" : "value"
}
response = requests.post("http://httpbin.org/post", data=data)

POST请求还可以上传文件,通过files字段上传

import requests
files= {"files":open("test.jpg","rb")}
response = requests.post("http://httpbin.org/post",files=files)
print(response.text)
JSON解析

响应提供了json方法,可以把响应的内容转换成json,和用json.loads进行转换的效果一致

import json
import requests

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

结果如下:

在这里插入图片描述

二进制内容

response.content可以获取二进制形式内容,往往用于下载一些图片视频

import requests

header = {
    "User-Agent" : "PostmanRuntime/7.26.5"
}

response = requests.get('https://img.ivsky.com/img/tupian/pre/201708/30/kekeersitao-002.jpg', headers=header) #不加header模拟浏览器则没有权限访问该网页
# print(response.content)
with open("./test.jpg", "wb") as f:
    f.write(response.content)

注意: response.text有时候会乱码,所以,有时候需要用content解码来代替text

response =requests.get("http://www.baidu.com")
print(response.content.decode("utf-8))
插入头部信息

在上面下载图片测试中就出现了因缺少头部信息而不能访问的错误,插入头部信息只需要通过headers字段传入相应的头部信息字典即可

header = {
    "User-Agent" : "PostmanRuntime/7.26.5" #用得最多就是User-Agent,用来模拟浏览器,不过我这用的postman的๑乛◡乛๑
}

response = requests.get('https://www.zhihu.com', headers=header)
获取Cookie

在响应的基本内容中有提及Cookie

import requests

response = requests.get("http://www.baidu.com")
print(response.cookies)

for key,value in response.cookies.items():
    print(key+"="+value)
会话维持

通过创建一个session对象来保持会话

import requests

s = requests.Session()

#下面的两次请求都是通过同一个会话发起的
s.get("http://httpbin.org/cookies/set/number/123456")
response = s.get("http://httpbin.org/cookies")

print(response.text)

#下面的两次请求是毫无关联的独立请求
requests.get("http://httpbin.org/cookies/set/number/123456")
response = requests.get("http://httpbin.org/cookies")

如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。链接

证书验证

以https方式访问的网页会涉及到证书的问题,有时会出现证书不合法的情况

import requests
from requests.packages import urllib3

urllib3.disable_warnings() #关闭警告提醒
response = requests.get("https://www.12306.cn",verify=False) #verify设置为False,不再校验证书
print(response.status_code)
代理设置
import requests

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:password@127.0.0.1:9999"
}

如果代理是通过socks方式,需要先pip install requests[socks]

proxies= {
"http":"socks5://127.0.0.1:9999",
"https":"sockes5://127.0.0.1:8888"
}
认证设置

这个认证设置不同于前面的证书验证,这个是类似于用户名密码的认证设置,需要在弹出框中输入用户名和密码才能进一步操作【链接

import requests

response = requests.get("http://120.27.34.24:9001/",auth=("user","123"))
print(response.status_code)
异常处理

所有异常都在requests.exceptions中,其中:
RequestException继承IOError
HTTPError,ConnectionError,Timeout继承RequestionException
ProxyError,SSLError继承ConnectionError
r",“123”))
print(response.status_code)


#### 异常处理

所有异常都在requests.exceptions中,其中:
RequestException继承IOError
HTTPError,ConnectionError,Timeout继承RequestionException
ProxyError,SSLError继承ConnectionError
ReadTimeout继承Timeout异常
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值