Requests
requests是python语言编写,基于urllib,比urllib更加方便,节约大量工作,完全满足http测试工作。
可使用命令pip install requests安装requests库
常用方法
请求
- GET:请求指定的页面信息,返回实现主体
- HEAD:只请求页面的首部
- POST:请求服务器接受所有指定的文档作为对所标识的URL的新的从属体
- DELETE:请求服务器删除指定页面
- HEAD:类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头
- CONNECT:把服务器当做跳板,让服务器代替客户端访问其他网页
- OPTIONS:允许客户端查看服务器的性能
- TRACE:回显服务器收到的请求,主要用于测试或诊断
请求头
- Accept:请求报头域,用于指定客户端可接受哪些类型的信息。
- Cookie:也常用复数形式 Cookies,这是网站为了辨别用户进行会话跟踪而存储在用户本地的数据。它的主要功能是维持当前访问会话。例如,我们输入用户名和密码成功登录某个网站后,服务器会用会话保存登录状态信息,后面我们每次刷新或请求该站点的其他页面时,会发现都是登录状态,这就是Cookies的功劳。Cookies里有信息标识了我们所对应的服务器的会话,每次浏览器在请求该站点的页面时,都会在请求头中加上Cookies并将其发送给服务器,服务器通过Cookies识别出是我们自己,并且查出当前状态是登录状态,所以返回结果就是登录之后才能看到的网页内容。
- Referer:此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如作来源统计、防盗链处理等。
- User-Agent:简称UA,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫时加上此信息,可以伪装为浏览器;如果不加,很可能会被识别出为爬虫 。
- x-requested-with :XMLHttpRequest (代表ajax请求)
- Accept-Language:指定客户端可接受的语言类型。
- Accept-Encoding:指定客户端可接受的内容编码
- Content-Type:也叫互联网媒体类型(Internet Media Type)或者MIME类型,在HTTP协议消息头中,它用来表示具体请求中的媒体类型信息。例如,text/html代表HTML格式,image/gif代表GIF图片,application/json代表JSON类型
- Date:标识响应产生的时间。
- Content-Encoding:指定响应内容的编码。
- Server:包含服务器的信息,比如名称、版本号等。
- Content-Type:文档类型,指定返回的数据类型是什么,如text/html代表返回HTML文档,application/x-javascript则代表返回JavaScript文件,image/jpeg则代表返回图片。
响应头
- Set-Cookie:设置Cookies。响应头中的Set-Cookie告诉浏览器需要将此内容放在Cookies中,下次请求携带Cookies请求。
- Expires:指定响应的过期时间,可以使代理服务器或浏览器将加载的内容更新到缓存中。如果再次访问时,就可以直接从缓存中加载,降低服务器负载,缩短加载时间。
案例
一、获取搜狗搜索页面
# 导包
import requests
# 获取网页
url = 'https://www.sogou.com/'
# 发起请求
res = requests.get(url=url)
# 获取响应数据,text返回字符串形式响应数据
text = res.text
# 存储数据,当前目录下没有搜狗.html自动创建,有则覆盖
with open('./搜狗.html', 'w', encoding='utf-8') as f:
f.write(text)
二、模拟查询输入的人
# 导包
import requests
# 键盘输入查询
i = input("请输入要查询人物:")
# 查询网站
url = f'https://www.sogou.com/web?query={i}'
# 模拟用户浏览浏览器
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3868.400 QQBrowser/10.8.4394.400'
}
# 重定义url、hraders
res = requests.get(url=url, headers=headers)
# 文本数据
text = res.text
# 新建文件的名
name = i + '.html'
# 以w方式、utf-8编码打开文件name(没有会自动创建)
with open(name, 'w', encoding='utf-8') as f:
# 写入数据
f.write(text)
三、百度翻译
# 导包
import requests
import json
# 指定url网页
post_url = 'https://fanyi.baidu.com/sug'
# 进行UA伪装,模拟浏览浏览器
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3868.400 QQBrowser/10.8.4394.400'
}
# 获取键盘输入内容
i = input("请输入要翻译内容:")
# 定义元组
data = {
'kw': i
}
# 发送请求
res = requests.post(url=post_url, data=data, headers=headers)
# json方法返回的是obj(如果确认响应数据是json类型的,才可以使用json)
a = res.json()
# 定义文件名
name1 = i + '.json'
# 以w格式,utf-8编码打开文件
name = open(name1, 'w', encoding='utf-8')
# fp:文件描述符,将fp(.read()支持包含JSON文档的文本文件或二进制文件)反序列化为Python对象。
# ensure_ascii 显示文字
json.dump(a, fp=name, ensure_ascii=False)
四、爬取指定小说章节(简易)
# 导包
import requests
# 输入(第一章为4490686)
m = input("请输入页数:")
# 获取页面
url = f'https://www.qqxs5200.com/book_123515/4490{m}.html'
# 发送请求
res = requests.get(url=url)
# 保存文件
with open('a.html', 'w', encoding='utf-8') as f:
f.write(res.text)