活动地址:CSDN21天学习挑战赛
Python requests库(爬虫和接口测试)
安装request:pip install requests
requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到。可以说,Requests 完全满足如今网络的需求
属性、方法 | 描述说明 |
---|---|
response = requests.get(url) | 发送请求获取的响应对象(最常用) |
response = requests.post(ur1) | 发送请求获取的响应对象 |
response.url | 响应的ur,有时候响应的ur1和请求的uI并不一致 |
response.status_code | 响应状态码,如: 200,404 |
response.request.headers | 响应对应的请求头 |
response.headers | 响应头 |
response.request.cookies | 响应对应请求的cookie,返回cookieJar类型 |
response.cookies | 响应的cookie (经过了set- cookie动作,返回cookieJar类型) |
response.json() | 自动将json字符串类型的响应内容转换为python对象(dictor ls) |
response.text | 返回响应的内容,str类型 |
response.content | 返回响应的内容,bytes类型 |
POST和GET是HTTP请求的两种方式,都可实现将数据从浏览器向服务器发送带参数的请求。
HTTP请求底层协议都是TCP/IP,所以两者没有本质的区别。
GET是获取的意思,顾名思义就是获取信息。GET是默认的HTTP请求方法。
GET方法把参数通过key/value形式存放在URL里面,如果参数是英文数字原样显示,如果是中文或者其他字符加密(Base64)URL长度一般有限制所以GET方法的参数长度不能太长。由于参数显示再地址栏所以不安全,一般需要保密的请求不使用GET。
POST是邮件的意思,顾名思义就像一封信一样将参数放在信封里面传输。它用于修改服务器上的数据,一般这些数据是应该保密的,就像信件一样,信的内容只能收信的人看见。例入当用户输入账号和密码登录时账号和密码作为参数通过HTTP请求传输到服务器,这时候肯定不能用GET方法将账号密码直接显示再URL上,这时候就应该用POST方法保证数据的保密性。
http请求由请求行,请求头,请求体组成:
请求行(request line):用于说明请求类型、要访问的资源路径、HTTP版本号(GET /index.html HTTP/1.1)
请求头部(header):用于说明服务器要使用的附加信息
一个空行
请求数据(body):任意添加的数据
请求行由请求方法、请求url、http协议及版本组成。
请求方法:get、post、head、put、delete、trace、connect、options
get用来请求指定页面的内容,并返回实体主体,post向服务器提交资源数据进行请求处理,post请求可能会导致新的资源的建立或者已有资源的修改,post比get更安全,因为get方法数据存放在请求行里的url末尾,而post方法数据存放在请求体里,get有url的长度限制,post能发送的数据更大,post不会被缓存在服务器日志,post能发送更多的数据类型,get只能发送ASCII码;但是post比get慢;
Head:用于获取报头,类似于get请求,只不过返回的响应中没有具体的内容
Put:从客户端向服务器传送的数据取代指定的文档的内容
Delete:请求服务器删除指定的页面
Trace:回显服务器收到的请求,主要用于测试或诊断
Connect:保留将来使用
OPTIONS:允许客户端查看服务器的性能
请求头
Host:请求的web服务器域名地址,也就是请求被发送的目的地
Accept:指定客户端接受哪些类型的信息
Accept-Language:浏览器说明自己接收的语言
Authorization:证明客户端有权查看某个资源
Cookie:http请求发送时,会把保存在请求域名下的所有cookie值一起发送给web服务器
Content-Type:Body编码方式
3.HTTP协议的传输
Request —URL + request headers(请求头信息)
Response —HTML ++ responce headers(返回头信息)
General
Request URL: https://www.baidu.com/
Request Method: GET requests的获取方法
Status Code: 200 OK 返回值
Remote Address: 14.215.177.39:443 服务器名称
Referrer Policy: no-referrer-when-downgrade
4.请求头信息中重要的三个信息
User-Agent —身份是什么
Referer —跳转网页是什么(即现在的网页是从哪个网页来的)
cookie —本地存储信息的—与服务器的session一 一对应
添加的顺序:1—>2—>3如果能够获取,不再添加
如果加上都不行,把headers全部复制下来
未完待续
import requests
import re
# https://qq.yh31.com/zjbq/2999374.html
# 定义一个函数目的:获取每张要爬取图片的地址
# 1.先要找到目标网页https://qq.yh31.com/zjbq/2999374.html 源代码数据
# 2.用正则来匹配不同图片的地址产生个匹配之 后的结果
# 3.可以通过源代码和匹配之后的结果来找到爬取图片的地址
def get_urls():
# 第一步
response = requests.get('https://wenku.baidu.com/view/9453dc5801768e9951e79b89680203d8ce2f6ad8.html')
# 第二步
# .* 表示:匹配任意数量不换行的字符
# r''
#
# url_add = r'
url_add = r'
# 第三步
url_list = re.findall(url_add, response.text)
# print(url_list)
return url_list
# 定义第二个函数 目的:下载数据
def get_gif(url, name):
response = requests.get(url)
# G:\爬虫下载\图片
with open('G:\爬虫下载\图片\%d.gif' % name, 'wb') as ft:
# response.content 二进制
ft.write(response.content)
if __name__ == '__main__':
url_list = get_urls()
# 定义一个变量 目的:给图片命名
a = 1
for url in url_list:
com_url = 'https://qq.yh31.com/' + url
# print(com_url)
get_gif(com_url, a)
a += 1
print(com_url)