什么是requests模块
官方文档:https://requests.readthedocs.io/en/master/
- requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求。功能强大,用法简洁高效。在爬虫领域中占据着半壁江山的地位。
- 为什么要使用requests模块
因为在使用urllib模块的时候,会有诸多不便之处,总结如下: - 手动处理url编码
- 手动处理post请求参数
- 处理cookie和代理操作繁琐
- …
使用requests模块: - 自动处理url编码
- 自动处理post请求参数
- 简化cookie和代理操作
…
如何使用requests模块
安装:
pip install requests
使用流程
- 指定url
- 基于requests模块发起请求
- 获取响应对象中的数据值
- 持久化存储
response的常用属性
- response.text 响应体 str类型
- respones.content 响应体 bytes类型
- response.status_code 响应状态码
- response.request.headers 响应对应的请求头
- response.headers 响应头
- response.request.cookies 响应对应请求的cookie
- response.cookies 响应的cookie(经过了set-cookie动作)
Requests库中有7个主要的函数
分别是 request() 、get() 、 head() 、post() 、put() 、patch() 、delete() 。这七个函数中request()函数是其余六个函数的基础函数,其余六个函数的实现都是通过调用该函数实现的。
方法 说明
- requests.request() 构造一个请求,支撑一下方法的基础方法
- requests.get() 获取HTML网页的主要方法,对应于HTTP的GET(请求URL位置的资源)
- requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD(请求URL位置的资源的头部信息)
- requests.post() 向HTML网页提交POST请求的方法,对应于HTTP的POST(请求向URL位置的资源附加新的数据)
- requests.put() 向HTML网页提交PUT请求的方法,对应于HTTP的PUT(请求向URL位置储存一个资源,覆盖原来URL位置的资源)
- requests.patch() 向HTML网页提交局部修改的请求,对应于HTTP的PATCH(请求局部更新URL位置的资源)
- requests.delete() 向HTML网页提交删除请求,对应于HTTP的DELETE(请求删除URL位置储存的资源)
而这几个函数中,最常用的又是 requests.get() 函数。get函数有很多的参数,我只举几个比较常用的参数
参数 说明
- url 就是网站的url
- params 将字典或字节序列,作为参数添加到url中,get形式的参数
- data 将字典或字节序列,作为参数添加到url中,post形式的参数
- headers 请求头,可以修改User-Agent等参数
- timeout 超时时间
- proxies 设置代理
# -*- coding: utf-8 -*-
import requests #调用requests模块
from lxml import etree #调用html解析
from Chaojiying_Python import chaojiying #调用超级鹰打码平台
import time # 调用时间模块
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
} #模仿浏览器UA头
session = requests.Session()# 动态获取cookie
# 识别验证码
url ="https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx"
page_text = session.get(url=url,headers=headers).text
# 解析验证码图片
tree = etree.HTML(page_text)
img_src = "https://so.gushiwen.cn/"+tree.xpath('//*[@id="imgCode"]/@src')[0]
# 将验证码图片保存到本地
img_data = session.get(img_src,headers=headers).content
with