爱游戏全站app官网入口-爱游戏官网

requests高级用法、代理池搭建 -爱游戏全站app官网入口

2023-08-21,,

requests

1.自动携带cookie的session对象

# session对象----》已经模拟登录上了一些网站---》单独把cookie 取出来
import requests header = {
'referer': 'http://www.aa7a.cn/user.php?&ref=http://www.aa7a.cn/',
'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=周浦&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('
网站地图