网站首页 > 技术文章 正文
Resquests库应该是大多数爬虫初学者接触到的第一个库,因为他够简洁,而且功能对于常规的网页内容也够用。更好的是,它有中文文档,对我们这种四六级飘过的选手很友好,找机会整理了一下。
一、理论知识
1、导入requests模块:
import requests
2、requests.get()——最简单的请求:
r = requests.get('https://www.jianshu.com/')
3、requests.post():
用来给网页传递一个表单,主要用来进行登陆操作
r = requests.post('http://httpbin.org/post', data = {'key':'value'})
4、传递参数:
parmas参数
- 直接传输:
response = requests.get("http://httpbin.org/get?name=zhangsan&age=22")
print(response.text)
- 通过字典传输:
payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.get("http://httpbin.org/get", params=payload)
print(response.text)
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)
5、Proxies(代理)
proxies = {
"http": "https://175.44.148.176:9000",
"https": "https://183.129.207.86:14002"
}
response = requests.get("https://www.baidu.com/", proxies=proxies)
6、Response的一些属性
属性 描述 response.text 获取str类型(Unicode编码)的响应 response.content 获取bytes类型的响应 response.status_code 获取响应状态码 response.headers 获取响应头 response.request 获取响应对应的请求
7、cookies
cookie信息
response.cookies
session
session用来记录登陆状态,第一次用session发送post登陆请求后,请求头信息、登陆成功的cookies信息等都保存在session对象中,第二次只需要直接get即可。同时也可验证是否登录成功。
def login_renren():
login_url = 'http://www.renren.com/SysHome.do'
login_data = {"email": "账号","password": "密码"}
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()
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、百度贴吧请求:
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)
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 run(self):
for url in self.url_list:
data = self.get_data(url)
num = self.url_list.index(url)
self.save_data(data, num)
def get_data(self, url):
response = requests.get(url, headers=self.headers)
return response.content
def save_data(self, data, num):
file_name = self.name + "_" + str(num) + ".html"
with open(file_name, "wb") as f:
f.write(data)
if __name__ == '__main__':
name = sys.argv[1]
pn = int(sys.argv[2])
baidu = BaiduTieBa(name, pn)
baidu.run()
- if __name__ == '__main__':的作用:
一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行。因此 if name == 'main': 的作用就是控制这两种情况执行代码的过程,在 if name == 'main': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的。 - sys.argv[n]:用于获取命令行输入的参数,sys.argv[0]为baidu.py文件的绝对路径,sys.argv[1]为第一个输入的参数,以此类推。注意,得到的是一个字符串对象。
- str1.format(str2):将str2填入str1的{}中
- list.index(str):输出str在list中的位置
- response.content:以byte类型输出
- open(file_name, "wb"):以byte类型写入
注:参考文章的这个例子感觉有点问题,"http://tieba.baidu.com/f?kw={}&ie=utf-8&pn={}".format(name,pn),感觉不应该此时传输pn,修改后可以跑通了。
baidu.py文件写好后,在项目目录打开CMD,输入:python baidu.py 两会 6,得到结果。
2、人人网模拟登陆
session记录登录信息和cookie,接着访问个人主页,将结果保存到renren.html文件
import json
import requests
def login_renren():
login_url = 'http://www.renren.com/PLogin.do'
login_data = {"email": "账号","password": "密码"}
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()
session.post(login_url, data=login_data, headers=headers)
response = session.get("http://www.renren.com/581249666/newsfeed/photo")
with open('renren.html', 'wb') as fp:
fp.write(response.content)
cookies_dict = requests.utils.dict_from_cookiejar(response.cookies)
with open('cookies.txt', 'w') as f:
json.dump(cookies_dict,f)
with open('cookies.txt', 'r') as f:
cookies = json.load(f)
print(cookies)
login_renren()
猜你喜欢
- 2024-09-27 urllib用账号密码登陆,携带cookie访问链接
- 2024-09-27 简单说说爬虫这个神奇的工具(简单说说爬虫这个神奇的工具怎么写)
- 2024-09-27 python接口自动化(十三)--cookie绕过验证码登录(详解)
- 2024-09-27 一键生成 QQ 历史报告,谁最在意你?
- 2024-09-27 开源:仿网易云音乐Android客户端(安卓开发仿网易云)
- 2024-09-27 你要偷偷的学Python,然后惊呆所有人(第十一天)
- 2024-09-27 package-lock.json的作用?(packagelockjson是做什么用的)
- 2024-09-27 Python保存Cookie到TXT文件(python的cookies)
- 2024-09-27 python爬虫实战之Headers信息校验-Cookie
- 2024-09-27 python爬虫之Requests库,及基本使用
- 1515℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 577℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 514℃MySQL service启动脚本浅析(r12笔记第59天)
- 487℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 486℃启用MySQL查询缓存(mysql8.0查询缓存)
- 470℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 450℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 448℃MySQL server PID file could not be found!失败
- 最近发表
-
- 宝塔面板Nginx如何提高网站访问速度?
- 接口调试工具ApiPost中form-data/x-www-form-urlencoded/raw区别
- 高并发场景下,Nginx性能如何提升10倍?
- 高并发场景下,Nginx如何抗住千万级流量?
- 浏览器中在线预览pdf文件,pdf.mjs插件实现web预览pdf
- 为什么你的网站加载慢?90%的人忽略了这2个设置。
- 别再无脑复制Nginx配置了!掌握这10个"性能核弹"级参数
- 你的Nginx配置,可能就是你网站最慢的一环,注意这几个优化参数
- 深入浅出HTTP压缩技术(http2压缩)
- C程序设计之:1-1/2+1/3-... + 1/n 的和
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (83)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)