首页 > 其他分享 >http 和 https区别,自动携带cookie的session对象,响应response,下载图片视频到本地,编码问题,解析json,ssl认证,使用代理,超时设置,异常处理,上传文件,代理池搭建

http 和 https区别,自动携带cookie的session对象,响应response,下载图片视频到本地,编码问题,解析json,ssl认证,使用代理,超时设置,异常处理,上传文件,代理池搭建

时间:2023-07-07 21:11:27浏览次数:46  
标签:视频 http respone get 代理 session https print requests

1.1 自动携带cookie 的session对象



# session对象----》已经模拟登录上了一些网站---》单独把cookie 取出来
	-res.cookies
    -转成字典 res.cookies.get_dict()
#请求头和数据 
import requests

header = {
    'Referer': 'http://www.aa7a.cn/user.php?&ref=http%3A%2F%2Fwww.aa7a.cn%2F',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}

data = {
    'username': '[email protected]',
    'password': 'lqz123',
    'captcha': 'xxxx',
    'remember': 1,
    'ref': ' http://www.aa7a.cn/',
    'act': 'act_login'
}
    
# 使用session发送请求
session=requests.session()
res = session.post('http://www.aa7a.cn/user.php', data=data, headers=header)
res1 = session.get('http://www.aa7a.cn/') #不需要携带cookie了

image

1.2 响应Response

#http的响应,就是res对象,所有http响应的东西,都在这个对象中
respone = requests.get('http://www.aa7a.cn/')
print(type(respone))
from requests.models import Response
print(respone.text)   # 响应体转成字符串,默认使用utf-8编码----》以后打印出来可能会乱码
print(respone.content) #响应体的bytes格式
print(respone.status_code)#响应状态码
print(respone.headers)  # 响应头
print(respone.cookies)  # cookie
print(respone.cookies.get_dict()) # cookie 转成字典
print(respone.cookies.items()) #键值对的形式
print(respone.url)    # 请求地址
print(respone.history) # 访问一个地址,如果重定向了,requests会自动重定向过去,放着之前没重定向之前的地址,列表
print(respone.encoding)  #网页编码

关闭:response.close()
respone.iter_content()  # 一点一点取,用来下载图片视频之类的

1.3下载图片/视频到本地

res=requests.get('http://pic.imeitou.com/uploads/allimg/220520/5-220520095649.jpg')
res=requests.get('https://vd2.bdstatic.com/mda-pfbcdfzec56w6bkn/1080p/cae_h264/1686576386781438049/mda-pfbcdfzec56w6bkn.mp4')
# with open('性感123.png','wb') as f:
with open('母猪的产后护理.mp4','wb') as f:
    # f.write(res.content)
    for line in res.iter_content(chunk_size=1024):
        f.write(line)

1.4 编码问题

直接打印res.text 字符串形式-----》从网络过来是二进制----》转成字符串涉及到编码---》默认以utf-8,---》现在会自动识别页面的编码,自动转成对应的
res.encoding='gbk' # 手动指定编码
print(res.text)

1.5 解析json

#解析json
import requests
response=requests.get('http://httpbin.org/get')

import json
res1=json.loads(response.text) #太麻烦

res2=response.json() #直接获取json数据

print(res1 == res2) #True


res=requests.post('http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword',data='cname=&pid=&keyword=%E5%91%A8%E6%B5%A6&pageIndex=1&pageSize=10',headers={
    'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'
})
#返回的可能是html,也可能是json(前后端分离项目,返回数据json格式),转成字典直接用

res = requests.post('http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword', data={
    'cname': '',
    'pid': '',
    'keyword': '周浦',
    'pageIndex': 1,
    'pageSize': 10,
})

for item in res.json()['Table1']:
    print('餐厅名字:%s,餐厅地址:%s'%(item['storeName'],item['addressDetail']))

1.6 ssl认证(了解)

#证书验证(大部分网站都是https)
import requests
respone=requests.get('https://www.12306.cn') #如果是ssl请求,首先检查证书是否合法,不合法则报错,程序终端



#改进1:去掉报错,但是会报警告
import requests
respone=requests.get('https://www.12306.cn',verify=False) #不验证证书,报警告,返回200
print(respone.status_code)

#改进2:去掉报错,并且去掉警报信息
import requests
from requests.packages import urllib3
urllib3.disable_warnings() #关闭警告
respone=requests.get('https://www.12306.cn',verify=False)
print(respone.status_code)

#改进3:加上证书
#很多网站都是https,但是不用证书也可以访问,大多数情况都是可以携带也可以不携带证书
#知乎\百度等都是可带可不带
#有硬性要求的,则必须带,比如对于定向的用户,拿到证书后才有权限访问某个特定网站
import requests
respone=requests.get('https://www.12306.cn',
                     cert=('/path/server.crt',
                           '/path/key'))
print(respone.status_code)

1.7 使用代理(重要)

#官网链接: http://docs.python-requests.org/en/master/user/advanced/#proxies

#代理设置:先发送请求给代理,然后由代理帮忙发送(封ip是常见的事情)
import requests
proxies={
    'http':'http://egon:123@localhost:9743',#带用户名密码的代理,@符号前是用户名与密码
    'http':'http://localhost:9743',
    'https':'https://localhost:9743',
}
respone=requests.get('https://www.12306.cn',
                     proxies=proxies)

print(respone.status_code)



#支持socks代理,安装:pip install requests[socks]
import requests
proxies = {
    'http': 'socks5://user:pass@host:port',
    'https': 'socks5://user:pass@host:port'
}
respone=requests.get('https://www.12306.cn',
                     proxies=proxies)

print(respone.status_code)

1.8 超时设置

#超时设置
#两种超时:float or tuple
#timeout=0.1 #代表接收数据的超时时间
#timeout=(0.1,0.2)#0.1代表链接超时  0.2代表接收数据的超时时间

import requests
respone=requests.get('https://www.baidu.com',
                     timeout=0.0001)

1.9 异常处理

#异常处理
import requests
from requests.exceptions import * #可以查看requests.exceptions获取异常类型

try:
    r=requests.get('http://www.baidu.com',timeout=0.00001)
except ReadTimeout:
    print('===:')
# except ConnectionError: #网络不通
#     print('-----')
# except Timeout:
#     print('aaaaa')

except RequestException:
    print('Error')

1.10 上传文件

import requests
files={'file':open('a.jpg','rb')}
respone=requests.post('127.0.0.1:8000',files=files)
print(respone.status_code)

http 和 https区别

https://zhuanlan.zhihu.com/p/561907474

    '''
    https 是 http+ssl/tls  他们的端口一个是443一个是80
    https 保证了传输过程中数据的安全,可以防止中间人的攻击
    '''

2 代理池搭建

import requests
proxies = {
    'http': '104.193.88.77:80',
}
respone=requests.get('http://127.0.0.1:8000/',proxies=proxies)
print(respone)



# 搭建一个代理池---》每次可以从池中随机取出一个代理---》发送请求
# 公司内部要用,会花钱买
# 咱们自己用,基于网上的开源软件,自己搭建



##  开源的代理池核心原理:https://github.com/jhao104/proxy_pool
	-1 使用爬虫技术,爬取网上免费的代理
    -2 爬完回来做验证,如果能用,存到redis中
    # 启动调度程序,爬代理,验证,存到redis中
	python proxyPool.py schedule


    -3 使用flask启动服务,对外开放了几个接口,向某个接口发请求,就能随机获取一个代理
    # 启动webApi服务
	python proxyPool.py server

#搭建步骤:
	 1 从git拉去开源代码
    	git clone https://github.com/jhao104/proxy_pool.git
    2 使用pycharm打开,创建虚拟环境
    	mkvirtualenv -p python3 pool
    3 配置项目使用虚拟环境
    4 修改项目配置文件
    	DB_CONN = 'redis://127.0.0.1:6379/2'
		HTTP_URL = "http://www.baidu.com"
		HTTPS_URL = "https://www.baidu.com"
        
    5 启动调度程序---》爬取网站,验证,存到redis
    	python proxyPool.py schedule
        
    6 启动web程序(flask写的)
    	python proxyPool.py server
        
    7 向http://192.168.1.252:5010/get/?type=http 地址发送请求就可以随机获取代理ip

2.1 django后端获取客户端的ip

import requests
res = requests.get('http://192.168.1.252:5010/get/?type=http').json()['proxy']
proxies = {
    'http': res,
}
print(proxies)
# 我们是http 要使用http的代理
respone = requests.get('http://139.155.203.196:8080/', proxies=proxies)
print(respone.text)

3 爬取某视频网站

# https://www.pearvideo.com/

#  加载下一页的地址
https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=1&start=0


import requests
import re

res = requests.get('https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=1&start=0')

video_list = re.findall('<a href="(.*?)" class="vervideo-lilink actplay">', res.text)
print(video_list)
for video in video_list:
    url = 'https://www.pearvideo.com/' + video
    header = {
        'Referer': url
    }

    video_id = video.split('_')[-1]
    video_url = 'https://www.pearvideo.com/videoStatus.jsp?contId=%s&mrd=0.8273125965736401' % video_id
    res1 = requests.get(video_url, headers=header).json()  # 真正能拿到视频的地址发送请求
    real_mp4_url = res1['videoInfo']['videos']['srcUrl']

    real_mp4_url = real_mp4_url.replace(real_mp4_url.split('/')[-1].split('-')[0], 'cont-%s' % video_id)
    print(real_mp4_url)
    res2 = requests.get(real_mp4_url)
    with open('./video/%s.mp4' % video, 'wb') as f:
        for line in res2.iter_content():
            f.write(line)






# ajax 请求拿回来的视频地址是:
# 能播放的地址:
 https://video.pearvideo.com/mp4/adshort/20181106/     1688703103822    -13189302_adpkg-ad_hd.mp4  # 不能的
 https://video.pearvideo.com/mp4/adshort/20181106/      cont-1470647     -13189302_adpkg-ad_hd.mp4 #能的

 url = 'https://video.pearvideo.com/mp4/adshort/20181106/1688703103822-13189302_adpkg-ad_hd.mp4'


标签:视频,http,respone,get,代理,session,https,print,requests
From: https://www.cnblogs.com/whxx/p/17536079.html

相关文章

  • EasyCVR视频融合平台国标级联后推送不了通道是什么原因?
    EasyCVR视频融合平台基于云边端一体化架构,具有强大的数据接入、处理及分发能力,平台支持海量视频汇聚管理,可支持多协议、多类型的设备接入,并能对设备进行分级、分组管理,并支持权限、角色分配,属于功能全面、性能稳定、高可靠、高可用的流媒体视频云服务平台。有用户反馈,EasyCVR平......
  • 安防监控视频融合EasyCVR平台非按需定时快照功能的设计与实现方法
    EasyCVR视频融合平台基于云边端一体化架构,部署轻快、功能灵活,平台可支持多协议、多类型设备接入,包括:国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、大华SDK、宇视SDK等。在视频能力上,可实现视频直播、录像、回放、检索、云存储、告警上报、语音对讲、电子地图、集群、智能......
  • .NET程序-配置使用Fidder代理,抓取后台HTTP请求
    一般我们用Fidder查看浏览器的Http请求来分析页面的性能问题,但是如果是后台.Net发起Http请求怎么看?下面介绍一种方法,通过配置.NET程序,使用Fidder代理可以查看后台的HTTP请求。首先开启Fiddler2代理: 下面有三种方式设置System.Net使用Fidder作为。方式一:代码方式vardefaul......
  • vue项目打包,配置nginx反向代理
    1.将Vue项目打包在终端中执行npmrunbuild打包完成后可以在项目的dist目录看到index.html(如下图)。将此目录的所有文件放到nginx服务器即可访问。 2.下载nginx并放到服务器上http://nginx.org/en/download.html通过点击上面的链接,下载对应于自己系统的nginx,这里使用Windo......
  • 个人视频汇总
    个人视频汇总0、云计算之ProxmoxVE云平台实战(完结篇)  https://edu.51cto.com/course/26145.html1、2020年深入浅出prometheus+grafana企业监控应用 https://edu.51cto.com/sd/d075b2、2020年深入浅出zabbix5.0企业应用实战 https://edu.51cto.com/sd/8f88b3、2020年Ju......
  • 【视频】决策树模型原理和R语言预测心脏病实例
    全文链接:https://tecdat.cn/?p=33128原文出处:拓端数据部落公众号分析师:YudongWan决策树模型简介决策树模型是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规则,并用树状图的结构来呈现这些规则,以解决分类和回归问题。与传统的线性回归模型不同,决......
  • 摄像头的视频传输接口
    一、视频传输的主要路劲视频原图像一般都来自摄像头,如果要将摄像头的产生视频进行显示、存储、处理等操作,就需要将摄像头的视频传输到处理器,在有处理器进行二次处理。从摄像头的结构组成可知,摄像头需要用感光芯片将光信号转换成电信号,然后用AD采集器将电信号转换成数字......
  • ASEMI代理海矽美SFP6002, 快恢复二极管SFP6002封装
    编辑-ZSFP6002参数描述:型号:SFP6002封装:TO-247-AB最大反向重复峰值电压VRRM:200V平均整流正向电流IF:60A反向恢复时间TRR:≤30nS正向峰值浪涌电流IFSM:450×2A工作接点温度TJ:-40~150℃储存温度TSTG:-40~150℃典型热阻RθJC:0.5℃/WVB:200VIR:0.02mAVF:0.9V  SFP6002特征:超......
  • IBM总线代理接口SoupAction does not match
    IBM总线代理接口SoupActiondoesnotmatch问题描述:ThegivenSOAPActionuploadScheduledoesnotmatchanoperation.解决方案:增加一个ESQL:CREATECOMPUTEMODULETEST_Compute1CREATEFUNCTIONMain()RETURNSBOOLEANBEGINCALLCopyMessageHeaders();CALLCopy......
  • 如何实现Java 视频文件去水印的具体操作步骤
    Java视频文件去水印在现今的数字媒体时代,视频文件无疑是最为常见的媒体之一。然而,我们有时会遇到一些带有水印的视频文件,这些水印可能是广告、商标或其他标记,影响了视频的观看体验。本文将介绍如何使用Java语言去除视频文件中的水印,并提供相应的代码示例。第一步:了解视频文件格......