首页 > 其他分享 >requests高级用法、代理池搭建

requests高级用法、代理池搭建

时间:2023-07-10 22:24:13浏览次数:37  
标签:http res 用法 print requests com response 搭建

requests高级用法

1.自动携带cookie的session对象

# session对象----》已经模拟登录上了一些网站---》单独把cookie 取出来
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': '用户名',
    'password': '密码',
    'captcha': 1111,
    '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)
cookie = res.cookies.get_dict()  # 转成字典
print(type(cookie))
res1 = session.get('http://www.aa7a.cn/') # 不需要携带cookie了
print('用户名' in res1.text)

2.响应response

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

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

''' 下载图片,视频到本地'''
# res = requests.get('https://pics0.baidu.com/feed/bd3eb13533fa828bf4e9977c327a1138950a5adc.jpeg')
# with open('1.png','wb') as f:
#     f.write(res.content)
res = requests.get('https://vd2.bdstatic.com/mda-pg6acnyf44f4dkdg/720p/h264/1688715361322809563/mda-pg6acnyf44f4dkdg.mp4')
with open('xsp.mp4','wb') as f:
    for line in res.iter_content(chunk_size=1024):
        f.write(line)
        
'''编码问题'''
# 直接打印res.text 字符串形式-----》从网络过来是二进制----》转成字符串涉及到编码---》默认以utf-8,---》现在会自动识别页面的编码,自动转成对应的
# res.encoding='gbk' # 手动指定编码
# print(res.text)

3.解析json

# 返回的可能是html,也可能是json(前后端分离项目,返回数据json格式),转成字典直接用
# 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'
# })
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']))

4.发起https请求

res = requests.get('https://www.cnblogs.com/XxMa/p/17515369.html',verify=False)
# verify参数的作用是验证证书,在发起HTTPS请求时使用
print(res.text)

5.使用代理

# 访问某些网站,频率过高,就会被封ip===》使用代理ip访问---》封的是代理ip
import requests
proxies = {
    'http': '104.193.88.77:80',
}
response = requests.get('https://www.cnblogs.com/XxMa/p/17515369.html',proxies=proxies)
print(response)

6.超时设置

response = requests.get('https://www.baidu.com',timeout=1)
print(response)

7.异常处理

from requests.exceptions import * #可以查看requests.exceptions获取异常类型
try:
    r=requests.get('http://www.baidu.com',timeout=0.00001)
except ReadTimeout:
    print('===')
except RequestException:
    print('Error')
except Exception as e:
    print(e)

8.上传文件

files = {'myfile':open('1.png','rb')}
response = requests.post('http://127.0.0.1:8000/upload/',files=files)
print(response.status_code)

9.认证登录

response = requests.get('xxx',auth=('user','password'))
print(response.status_code)

代理池搭建

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

##  开源的代理池核心原理: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

使用代理池

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)

爬取某视频网站

# 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,res,用法,print,requests,com,response,搭建
From: https://www.cnblogs.com/XxMa/p/17542444.html

相关文章

  • requests的基础使用
    爬虫介绍#爬虫:又称网络蜘蛛,spider,一堆程序,从互联网中抓取数据----》数据清洗---->入库#爬虫需要掌握的知识 -抓取数据:发送网络请求(http),获得响应(http响应,响应头,响应体---》真正重要的数据在响应体中) -python模块:requests,selenium-清洗数据:解析拿回......
  • 爬虫学习02 requests高级用法
    1requests高级用法1.0自动携带cookie的session对象#session对象----》已经模拟登录上了一些网站---》单独把cookie取出来-res.cookies是cookiejar对象,里面有get_dict()方法转换成字典-转成字典res.cookies.get_dict()#使用session发送请求,cookie自动携带sess......
  • Istio与Mcp Server服务器讲解与搭建演示
    01Istio与外部注册中心Istio为何需要对接外部注册中心Istio对Kubernetes具有较强的依赖性:1.服务发现就是基于Kubernetes实现的,如果要使用Istio,首先需要迁移到Kubernetes上,并使用Kubernetes的服务注册发现机制。2.对于大量现存的微服务项目来说,这个前提条件并不成立。对......
  • 7.10 requests的高级使用
    1. 自动携带cookie和session对象header={'Referer':'http://www.aa7a.cn/user.php?&ref=http%3A%2F%2Fwww.aa7a.cn%2F','User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/114......
  • JSP环境搭建教程(保姆级!!)
    简介JavaServerPages(JSP)是一种由SunMicrosystems开发的用于创建动态网页的技术。它是JavaEE(JavaEnterpriseEdition)技术的一部分,允许开发者在HTML中嵌入Java代码,从而实现动态内容的生成。JSP主要由两部分组成:静态数据和JSP元素。静态数据可以是任何类型......
  • Hadoop3.3.5完全分布式搭建
    首先在之前的伪分布基础上克隆两台机器这样一共三台虚拟机为这三台虚拟机设置三个不同的静态ip地址和主机名我的是billsaifu192.168.15.130hadoop1192.168.15.131hadoop2192.168.15.132静态IP设置#先进入rootvim/etc/sysconfig/network-scripts/ifcfg-ens33#修改......
  • sync.WaitGroup Add( ) 用法
    使用sync.WaitGroup来实现并发任务的同步。Done()通常在函数内使用deferwg.Done()调用。add()学习是我通常也放在函数内,今天我发现在函数内调用会出现问题,主进程会先执行,比如如下代码,会出现问题。packagemainimport( "fmt" "sync")varnintvarwgsync.WaitGroup......
  • 对一个已有项目搭建单元测试集的一个方法
    对一个已有项目搭建单元测试集的一个方法0说明1准备1.1软件环境googletestcmake1.2需要的知识单元测试相关概念1.3一般原则每次只测试一个对象,被测对象应该尽可能的独立,应该是一个很小的单元,依赖项通过mock或stub模拟;每个测试项均应执行迅速且独立于测试环境;各......
  • MATLAB/Simulink搭建电动汽车整车七自由度模型电动汽车七由度模型,包括纵向运动,侧向运
    MATLAB/Simulink搭建电动汽车整车七自由度模型电动汽车七由度模型,包括纵向运动,侧向运动横摆运动,模糊控制算法,轮胎模型,魔术公式等等,可以自定义车辆参数。转弯制动ABS控制模型,滑移率曲线。极限不稳定工况,蛇形工况,高速转弯制动工况。电动汽车整车模型,稳定性验证。ID:738063806942527......
  • anolis 8.8 (CentOS 8) 环境下搭建青岛大学OJ
    #yum-yinstallpython3-pip  //systemreplied:Packagepython3-pip-9.0.3-22.an8.noarchisalreadyinstalled.#pipinstalldocker-compose //systemreplied:  bash:pip:commandnotfound...#whereispip //systemreplied:  pip:/usr/bin/pip3.6#cd/u......