# requests模块
#########################################################
#requests模块是什么
它是一个Python第三方库,处理URL资源特别方便。也是处理发送请求的
#########################################################
# requests模块的安装
pip / pip3 install requests
#########################################################
# requests模块发送get请求
import requests # 引入requests模块
url = 'https://blog.dbsgw.cn/' # 目标网址
r = requests.get(url) # 通过requests发送get请求
print(r.text) #通过 text方法 在 r结果 中获取请求结果的内容
#########################################################
# 处理响应对象的乱码时候
因为有时候在通过 text方法获取内容会产生乱码
response.text
类型:str
解码类型: requests模块自动根据HTTP 头部对响应的编码作出有根据的推测,推测的文本编码
response.content
类型:bytes
解码类型: 没有指定
response.content.decode() 方法编码utf-8,也可以是r.content.decode('gbk')
import requests # 引入requests模块
url = 'https://blog.dbsgw.cn/' # 目标网址
r = requests.get(url) # 通过requests发送get请求
print(r.content.decode()) #通过 text方法 在 r结果中获取请求结果的内容
#########################################################
# response响应对象的其它常用属性或方法
r.url 响应的url;有时候响应的url和请求的url并不一致
r.status_code 响应状态码
r.request.headers 响应对应的请求头
r.headers 响应头
r.request._cookies 响应对应请求的cookie;返回cookieJar类型
r.cookies 响应的cookie(经过了set-cookie动作;返回cookieJar类型
r.json()自动将json字符串类型的响应内容转换为python对象(dict or list)
import requests # 引入requests模块
url = 'https://blog.dbsgw.cn/' # 目标网址
r = requests.get(url) # 通过requests发送get请求
print(r.url) # 获取响应url
print(r.status_code) # 获取响应状态码的
print(r.request.headers) # 获取对应的请求头的
print(r.headers) # 获取响应头的
print(r.request._cookies) # 响应对应请求的cookie;返回cookieJar类型
print(r.cookies) # 响应的cookie
print(r.json()) # 自动将json字符串类型的响应内容转换为python对象(dict or list) 必须是json字符串不然无法转换
#########################################################
# 发送带header的请求
模仿浏览器的信息发送请求 :有些网站会有反爬虫机制就会检测 User-Agent(客户端的操作系统以及浏览器的信息) requests模式是 python的信息
import requests
url = 'https://blog.dbsgw.cn/' # 目标网址
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" # 模仿浏览器信息
}
r = requests.get(url, headers=headers) # 发送请求
print(r.content.decode()) # 打印输出
#########################################################
# 发送带参数的请求 2种方法
# 1.url带参数
import requests #引入模块
url = 'https://blog.dbsgw.cn/index.php?keyword=vuex' # 目标网址
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" # 模仿浏览器信息
}
r = requests.get(url,headers=headers) # 发送请求
print(r.content.decode()) #打印输出
#########################################################
# 2.params携带参数
import requests # 引入requests模块
url = 'https://blog.dbsgw.cn/index.php?' #请求地址--- 保留?
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" #模仿浏览器
}
params = {
"keyword": "vuex" # 使用params携带参数
}
r = requests.get(url, headers=headers, params=params) #发送请求
print(r.content.decode()) #打印输出
#########################################################
# headers参数中携带cookie
import requests # 引入模块
url = 'https://blog.dbsgw.cn/admin/' # 目标地址
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
}
# 此时的cookie_list 还需要分成 键值对以(以 = 分键值对, ; 结束) cookie_list内容是我登录,后台的真实cookie
cookie_list = "em_advset=none; UM_distinctid=16f55320a2f217-0c3464152e904e-7711a3e-144000-16f55320a30162; Hm_lvt_70546d661cadce41b9173a040b7f077e=1581488650,1581922039; OUTFOX_SEARCH_USER_ID_NCOO=1236953064.5163746; Hm_lvt_30f7cf9424f966a7bb75b6095eee923c=1585277410,1585277415,1585399540,1585627352; Hm_lvt_fc5cb0ed53567ad9178d5cd0d38fc309=1585978509,1585979339,1585987393,1585991540; PHPSESSID=fo0gb5mfd78u5oip27vn37nj90; EM_AUTHCOOKIE_95yUDyuGoTu7WYejbLXmH8m6O630lMsd=admin%7C%7Ca7e91e464d86db572e6e588ef9dd5815; EM_TOKENCOOKIE_a1cfeb2a2e97e6b24a8f1ca927a73385=ba374f69f0f62e8099c89dd1d149d2d1; CNZZDATA1278526282=248400771-1578397714-https%253A%252F%252Fblog.dbsgw.cn%252F%7C1586014666; Hm_lpvt_fc5cb0ed53567ad9178d5cd0d38fc309=1586015571"
cookies = {cookies.split('=')[0]:cookies.split('=')[1] for cookies in cookie_list.split('; ')} #推导式的分隔
r = requests.get(url, headers=headers, cookies=cookies) # 发送请求
print(r.content.decode()) # 打印输出 的标题是 管理中----前端笔记说明我们成功的通过cookies 进去后台了
#########################################################
# 超时参数timeout的使用
在爬虫中,一个请求很久没有结果,就会让整个项目的效率变得非常低,这个时候我们就需要对请求进行强制要求,让他必须在特定的时间内返回结果,否则就报错。
import requests
url = 'http://www.google.com/'
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
}
r = requests.get(url, headers=headers, timeout=3) # timeout=3 超过3秒自动报错
print(r.content.decode()) # 打印输出
#########################################################
# proxy代理参数的使用 ------ 反正我是没有代理成功过,我查了服务器访问ip 根本没有代理成功我也不知道是不是ip的问题还是我配置的问题
proxy代理参数通过指定代理ip,让代理ip对应的正向代理服务器转发我们发送的请求,
代理ip 分: 透明代理,匿名代理,高匿代理
import requests
url = 'https://blog.dbsgw.cn/'
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
}
proxies = {
"http": "http://12.34.56.79:9527"
}
r = requests.get(url, headers=headers, proxies=proxies)
print(r.content.decode()) # 打印输出
#########################################################
# 使用verify参数忽略CA证书
该网站的CA证书没有经过【受信任的根证书颁发机构】的认证 ,就是证书不是官网认证的sll证书
import requests
url = 'https://sam.huat.edu.cn:8443/selfservice/'
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
}
r = requests.get(url, headers=headers, verify=False) # verify设置为false 默认跳过 不信任证书
print(r.content.decode('gbk'))
#########################################################
# 发送post请求 登录 前端博客
dada作为post传值的参数
import requests
url = 'https://blog.dbsgw.cn/admin/index.php?action=login'
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
}
data = {
"user": "****", # 账户
"pw": "****" #密码
}
r = requests.post(url, headers=headers, data=data) #发送请求
print(r.content.decode()) #打印输出
#########################################################
# 使用session登录前端笔记 实现不用每次都带cookie
import requests
url = 'https://blog.dbsgw.cn/admin/index.php?action=login'
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
}
session = requests.session() # 初始化session
data = {
"user": input('请输入账号'),
"pw": input('请输入密码')
}
r = session.post(url, headers=headers, data=data) #登录
r = session.get('https://blog.dbsgw.cn/admin/tag.php',headers=headers) #登录后访问其他页面
print(r.content.decode())
#########################################################
# 使用requests.session来完成github登陆,并获取需要登陆后才能访问的页面
自动处理cookie,即下一次请求会带上前一次的cookie
import requests
import re
# 构造请求头字典
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36',
}
# 实例化session对象
session = requests.session()
# 访问登陆页获取登陆请求所需参数
response = session.get('https://github.com/login', headers=headers)
authenticity_token = re.search('name="authenticity_token" value="(.*?)" />', response.text).group(1) # 使用正则获取登陆请求所需参数
# 构造登陆请求参数字典
data = {
'commit': 'Sign in', # 固定值
'utf8': '✓', # 固定值
'authenticity_token': authenticity_token, # 该参数在登陆页的响应内容中
'login': input('输入github账号:'),
'password': input('输入github账号:')
}
# 发送登陆请求(无需关注本次请求的响应)
session.post('https://github.com/session', headers=headers, data=data)
# 打印需要登陆后才能访问的页面
response = session.get('https://github.com/1596930226', headers=headers)
print(response.content.decode())
发表评论