一. requests 参数
- method: 提交方式
- url: 提交地址
- params: 在URL中传递的参数,GET
- data: 在请求体里传递的数据
- json 在请求体里传递的数据
- headers 请求头
- cookies Cookies
- files 上传文件
- auth 基本认知(headers中加入加密的用户名和密码)
- timeout 请求和响应的超市时间
- allow_redirects 是否允许重定向
- proxies 代理
- verify 是否忽略证书
- cert 证书文件
- stream 村长下大片
- session: 用于保存客户端历史访问信息
a. url
. 分析url
- https://www.baidu.com/s?wd=美女 = https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3
- 导入from urllib.parse import urlencode
. 分析请求头headers
- User-Agent
. Get请求不需要考虑请求体 import requests from urllib.parse import urlencode search_input = input(">>: ")
keyword = urlencode({"wd":search_input},encoding="utf-8")
url = "url = https://www.baidu.com/s?" + keyword requests.get(url,
headers={
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36"
}
)
b. params
# params 参数省去自己转换 import requests from urllib.parse import urlencode search_input = input(">>: ") requests.get("https://www.baidu.com/s?",
params={"wd":search_input},
headers={
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36"
}
)
c. headers
ddd
d. cookies
e. file 发送文件
import requests requests.post(
url='xxx',
filter={
'name1': open('a.txt','rb'), #名称对应的文件对象
'name2': ('bbb.txt',open('b.txt','rb')) #表示上传到服务端的名称为 bbb.txt
}
)
f. auth 认证
#配置路由器访问192.168.0.1会弹出小弹窗,输入用户名,密码 点击登录不是form表单提交,是基本登录框,这种框会把输入的用户名和密码 经过加密放在请求头发送过去
import requests requests.post(
url='xxx',
filter={
'name1': open('a.txt','rb'), #名称对应的文件对象
'name2': ('bbb.txt',open('b.txt','rb')) #表示上传到服务端的名称为 bbb.txt
}
)
g. stream 流
#如果服务器文件过大,循环下载 def param_stream():
ret = requests.get('http://127.0.0.1:8000/test/', stream=True)
print(ret.content)
ret.close() # from contextlib import closing
# with closing(requests.get('http://httpbin.org/get', stream=True)) as r:
# # 在此处理响应。
# for i in r.iter_content():
# print(i)
h. session 和django不同 事例:简化抽屉点赞
import requests session = requests.Session() ### 1、首先登陆任何页面,获取cookie i1 = session.get(url="http://dig.chouti.com/help/service") ### 2、用户登陆,携带上一次的cookie,后台对cookie中的 gpsd 进行授权
i2 = session.post(
url="http://dig.chouti.com/login",
data={
'phone': "",
'password': "xxxxxx",
'oneMonth': ""
}
) i3 = session.post(
url="http://dig.chouti.com/link/vote?linksId=8589623",
)
print(i3.text)
二. 登录事例
a. 查找汽车之家新闻 标题 链接 图片写入本地
b. 抽屉点赞 获取页面和登录都会获取gpsd 点赞会使用获取页面的gpsd 而不是登录的gpsd
c. 登录github 携带cookie登录
d. 登录github 演示
一. 先获取页面 1.请求的url: https://github.com/login
2.请求方法: GET
3.请求头分析
- 清除cookie,发现请求头里没有cookie,所以不要写
- User-Aget
4.服务端可能相应头带点东西
- 例如规定提交表单时必须携带cookie
- 有可能发送客户端一个csrftoken编码,第二次提交时必须携带csrftoken 二. 提交表单完成请求
1.请求url: https://github.com/session
2.请求方法: POST
3.请求头分析
- Referer: https://github.com/
- User-Agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36"
- cookies
4.请求体
commit: Sign in
utf8: ✓
authenticity_token: HIHg6UxhecIFqAGrHiGapG4y+8OShE6xJhJHU6wxg3mTo30JhYiENFu+JWtdFSj//5cCx6NaMEgcnsvF5MA8VQ==
#分析authenticity_token数据,只可能是第一次访问,相应头或相应体发过来的数据
login: [email protected]
password: 123456
5.分析第一次请求获取到的authenticity_token
- 在相应头中找不到
- 在相应体中找
6.结果为最后的跳转结果
import requests
import re # 第一次请求 response_get = requests.get("https://github.com/login",
headers={
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36"
}) authenticity_token = re.findall(r"authenticity_token.*?value=\"(.*?)\"",response_get.text,re.S)[]
response_cookie = response_get.cookies.get_dict() # 第二次登录 response_post = requests.post("https://github.com/session",
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36",
"Referer":"https://github.com/",
},
cookies = response_cookie,
data={
"commit": "Sign in",
"utf8": "✓",
"authenticity_token": authenticity_token,
"login": "8772 @ qq.com",
"password": ""
}) print(response_post.text)