Requests 是一个 Python 的 HTTP 客户端库。
Request支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和POST数据自动编码。
在python内置模块的基础上进行了高度的封装从而使得python进行网络请求时,变得人性化,使用Requests可以轻而易举的完成浏览器可有的任何操作。 现代,国际化,友好 。
目录
一、Requests基础
二、发送请求与接收响应(基本GET请求)
三、发送请求与接收响应(基本POST请求)
四、response属性
五、代理
六、cookie和session
七、案例
一、Requests基础
1.安装Requests库
pip install requests
2.使用Requests库
import requests
二、发送请求与接收响应(基本GET请求)
response = requests.get(url)
1.传送 parmas参数
- 参数包含在url中
response = requests.get("http://httpbin.org/get?name=zhangsan&age=22") print(response.text)
- 通过get方法传送参数
data = { "name": "zhangsan", "age": 30 } response = requests.get("http://httpbin.org/get", params=data) print(response.text)
2.模拟发送请求头(传送headers参数)
headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36" } response = requests.get("http://httpbin.org/get", headers=headers) print(response.text)
三、发送请求与接收响应(基本POST请求)
response = requests.post(url, data = data, headers=headers)
四、response属性
五、代理
proxies = { "http": "https://175.44.148.176:9000", "https": "https://183.129.207.86:14002" } response = requests.get("https://www.baidu.com/", proxies=proxies)
六、cookie和session
- 使用的cookie和session好处:很多网站必须登录之后(或者获取某种权限之后)才能能够请求到相关数据。
- 使用的cookie和session的弊端:一套cookie和session往往和一个用户对应.请求太快,请求次数太多,容易被服务器识别为爬虫,从而使账号收到损害。
1.不需要cookie的时候尽量不去使用cookie。
2.为了获取登录之后的页面,我们必须发送带有cookies的请求,此时为了确保账号安全应该尽量降低数据
采集速度。
1.cookie
(1)获取cookie信息
response.cookies
2.session
(1)构造session回话对象
session = requests.session()
示例:
def login_renren(): login_url = 'http://www.renren.com/SysHome.do' headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36" } session = requests.session() login_data = { "email": "账号", "password": "密码" } response = session.post(login_url, data=login_data, headers=headers) response = session.get("http://www.renren.com/971909762/newsfeed/photo") print(response.text) login_renren()
七、案例
案例1:百度贴吧页面爬取(GET请求)
import requests import sys class BaiduTieBa: def __init__(self, name, pn, ): self.name = name self.url = "http://tieba.baidu.com/f?kw={}&ie=utf-8&pn={}".format(name, pn) self.headers = { # "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36" # 使用较老版本的请求头,该浏览器不支持js "User-Agent": "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" } self.url_list = [self.url + str(pn*50) for pn in range(pn)] print(self.url_list) def get_data(self, url): """ 请求数据 :param url: :return: """ response = requests.get(url, headers=self.headers) return response.content def save_data(self, data, num): """ 保存数据 :param data: :param num: :return: """ file_name = "./pages/" + self.name + "_" + str(num) + ".html" with open(file_name, "wb") as f: f.write(data) def run(self): for url in self.url_list: data = self.get_data(url) num = self.url_list.index(url) self.save_data(data, num) if __name__ == "__main__": name = sys.argv[1] pn = int(sys.argv[2]) baidu = BaiduTieBa(name, pn) baidu.run()