【python爬虫】设计自己的爬虫 1. request封装
通过requests.session().request 封装request方法
考虑到请求HTTP/2.0
同时封装httpx 来处理HTTP/2.0的请求
封装requests
# 遇到请求失败的情况时 重新请求,请求5次等待2s
@retry(stop_max_attempt_number=5, retry_on_result=lambda re_data: re_data is None, wait_fixed=2000)def requests_request(self, method, url, params=None, data=None, json=None, headers=None, files=None, verify=False,cert=None, timeout=None, proxies=None, proxy=None, **kwargs):# 对异常进行捕获try:"""封装request请求,将请求方法、请求地址,请求参数、请求头等信息入参。注 :verify: True/False,默认为True,认证SSL证书开关;cert: 本地SSL证书。如果不需要ssl认证,可将这两个入参去掉使用session管理器requests.session(): 维持会话,跨请求的时候保存参数 """# 处理代理proxies = Noneif proxy:proxies = {'http://': 'http://' + proxy,'https://': 'https://' + proxy,}# 使用requests.session().request 请求re_data = requests.session().request(method, url, params=params, data=data, json=json, headers=headers,files=files, cert=cert, timeout=timeout, verify=verify,proxies=proxies, **kwargs)# 异常处理 报错显示具体信息except Exception as e:re_data = None# 打印异常print("请求失败:{0}".format(e))logger.error("Error occurred: %s", str(e), exc_info=True)# 重新抛出异常,触发 retry 机制raise e# 返回响应结果return re_data
封装httpx
@retry(stop_max_attempt_number=5, retry_on_result=lambda re_data: re_data is None, wait_fixed=2000)def httpx_request(self, method, url, is_http2=False, content=None, data=None, files=None, json=None, params=None,headers=None, cookies=None, timeout=None, extensions=None, proxy=None, **kwargs):# 对异常进行捕获try:"""使用client method.upper() 请求方法都转为大写"""# 处理代理proxies = Noneif proxy:proxies = {'http://': 'http://' + proxy,'https://': 'https://' + proxy,}re_data = httpx.Client(http2=is_http2, proxies=proxies).request(method.upper(), url, content=content,data=data, files=files, json=json,params=params, headers=headers,cookies=cookies, timeout=timeout,extensions=extensions, **kwargs)# 异常处理 报错显示具体信息except Exception as e:re_data = None# 打印异常print("请求失败:{0}".format(e))logger.error("Error occurred: %s", str(e), exc_info=True)# 重新抛出异常,触发 retry 机制raise e# 返回响应结果return re_data
将两个请求封装在一个方法里
@retry(stop_max_attempt_number=5, retry_on_result=lambda re_data: re_data is None, wait_fixed=2000)def request(self, method, url, is_http2=False, params=None, data=None, json=None, headers=None, files=None,verify=False, cert=None, timeout=None, proxies=None, content=None, cookies=None, extensions=None,**kwargs):try:if is_http2:re_data = self.httpx_request(method=method.upper(), url=url, is_http2=is_http2, content=content,data=data, files=files, json=json, params=params, headers=headers,cookies=cookies, timeout=timeout, extensions=extensions, **kwargs)else:re_data = self.requests_request(method=method, url=url, params=params, data=data, json=json,headers=headers, files=files, cert=cert, timeout=timeout, verify=verify,proxies=proxies, **kwargs)# 异常处理 报错显示具体信息except Exception as e:re_data = None# 打印异常print("请求失败:{0}".format(e))logger.error("Error occurred: %s", str(e), exc_info=True)# 重新抛出异常,触发 retry 机制raise e# 返回响应结果return re_data
通过is_http2来区分
测试代码如下
if __name__ == '__main__':# request_requests 使用requests请求request_data = request_main.requests_request("get", 'https://spa16.scrape.center/')if request_data:print(request_data.text)print(request_data.status_code)# httpx 请求HTTP/2.0# response = re.httpx_request('GET', 'https://spa16.scrape.center/', True)# httpx 一般请求# headers = {'User-Agent': 'my-app/0.0.1'}# response = re.httpx_request('get', 'https://www.httpbin.org/get',params={'name': 'germey'})# print(response.text)# print(response.status_code)print(datetime.datetime.now())
相关文章:
【python爬虫】设计自己的爬虫 1. request封装
通过requests.session().request 封装request方法 考虑到请求HTTP/2.0 同时封装httpx 来处理HTTP/2.0的请求 封装requests # 遇到请求失败的情况时 重新请求,请求5次等待2s retry(stop_max_attempt_number5, retry_on_resultlambda re_data: re_data is None, wai…...
8.0 新特性 - innodb_ddl_threads
前言 MySQL 8.0.27 引入了一个新变量来控制 InnoDB 可用于创建(排序和构建)二级索引的最大并行线程数:innodb_ddl_threads 通过调整该参数,可以提升二级索引的创建速度。 参数介绍 1. innodb_ddl_threads 创建二级索引时&…...
pgAdmin 4 v7.8 发布,PostgreSQL 开源图形化管理工具
导读pgAdmin 是 PostgreSQL 领先的开源图形化管理工具。pgAdmin 4 旨在满足新手和有经验的 Postgres 用户的需求,提供强大的图形界面,简化了数据库对象的创建、维护和使用。 pgAdmin 开发团队日前发布了 pgAdmin 4 v7.8 版本,这个版本包括 21…...
Realrek 2.5G交换机 8+1万兆光RTL8373-VB-CG方案简介
新一代2.5G交换机方案RTL8373-VB-CG可以提供4中不同形态 a. 52.5G 电口110G光》RTL8373 b. 52.5G 电口110G电》RTL83738261 c. 82.5G 电口110G光》RTL83738224 d.82.5G 电口110G电口》RTL837382248261 1.概述 Realtek RTL8373-CG是一款低功耗、高性能、高度集成的八端口2.5G和一…...
Linux命令随笔
文章目录 grep命令 grep命令 例如,在Linux系统中,要在当前目录下的所有文件中搜索包含字符串"hello"的行,并显示文件名,可以使用以下命令: grep -r "hello" .其中,"."表示…...
最新版scene-builder安装
JavaFX Scene Builder是一个可视化的布局工具,用于设计JavaFX用户界面。它允许开发人员使用拖放和可视化的方式创建和编辑JavaFX界面,而无需直接编写代码。 JavaFX Scene Builder提供了一个直观的界面,让开发人员可以轻松地创建和修改JavaFX…...
直击电商商城内核!一站式解决方案
作为一家深耕电商运营多年的软件开发公司,我们拥有先进的轻量级电商中台系统,且100%开源,包含B2C、B2B2C、S2B2C、O2O和社区团购等多种商业模式,无论在技术、业务架构、功能、设计还是售后支持上,我们都秉承着追求极致…...
rabbitmq安装、基本使用
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.12-management docker会自己下载,然后运行 进入docker: docker exec -it rabbitmq bash 进入容器,重启rabbitmq:rabbitmq-server restart 感觉所有的…...
Amaon CloudFront助力出海业务访问优化
企业的展示网站需要面向多个国家的客户时,由于地理位置的原因。往往会出现一个痛点,网络延迟太高,以至于图片、视频播放时会非常卡顿。客户的访问体验非常差,直接影响到企业收益。此篇文章九河云综合分析Amaon CloudFront…...
python实现ModBusRTU服务端
python实现基于串口通信的ModBusRTU服务端是一件简单的事情,只要通过pymodbus模块和Serial模块就可以实现。...
yum安装node,npm
node官网 yum -y install nodejs npm 查看版本 npm -v node -v卸载 yum -y remove nodejs npm修改镜像源 4.1. 修改淘宝镜像源 set registry https://registry.npm.taobao.org npm config get registr4.2. 修改华为云镜像源 npm config set registry https://mirrors.huaweicl…...
ESM蛋白质语言模型系列
模型总览 第一篇《Biological structure and function emerge from scaling unsupervised learning to 250 million protein sequences 》ESM-1b 第二篇《MSA Transformer》在ESM-1b的基础上作出改进,将模型的输入从单一蛋白质序列改为MSA矩阵,并在Tran…...
RHCE-------Day1
存储管理 标准存储管理 1、分区 fdisk /dev/nume0n1 交互式指令 2、格式化 mkfs.xfs /dev/nume0n1p1 直接指定分区类型 mkfs -t xfs /dev/nume0n1p1 3、挂载 mount /dev/nume0n1p1 /mnt 取消挂载: umont …...
Linux(Centos7)防火墙端口操作记录
1、nginx -t #Nginx配置文件检查 上述截图代表检查没问题 上述截图检查配置文件配置错误,并提示错误文件位置 2、systemctl restart nginx #重启Nginx 重启Nginx失败 3、systemctl status nginx.service #查看Nginx服务状态 80端口被占导致服务启动失败 4、n…...
【MySQL数据库】初识MySQL数据库、安装MySQL
文章目录 前言一、什么是 MySQL?二、MySQL 的强大之处三、Ubuntu安装MySQL步骤 1: 更新包列表步骤 2: 安装 MySQL步骤 3: 启动 MySQL 服务步骤 4: 验证 MySQL 安装步骤 5: 确保 MySQL 安全性 总结 前言 在今天的数字化世界中,数据是企业和个人的重要资产…...
Keil Map信息解析
基本功能: 1.在Keil里面,通过App.Map复制所有信息。然后解析剪辑版内容。 2.随意输入一个函数内存地址,即可遍历出该内存地址属于哪个.c或者函数名。或者能遍历出变量。 强化功能: 1.通过Keil5 命令 Save xxxxxxx\1.Hex 0x200173…...
在重生奇迹MU中如何选择最佳的挂机点?
如何寻找最适合自己的挂机地点呢?小编建议玩家朋友从以下几点着手加以抉择。 怪物的等级不能过高 你的最佳挂机点要结合自己的实际情况来定,如果你刷怪比较吃力的话,那么此游戏地图并不适合你挂机,一旦挂机过程中,你…...
IT行业中的热门职业及前景展望
目录 一、IT技术发展背景及历程 二、IT行业热门职业 三、前景展望 一、IT技术发展背景及历程 随着科技的不断发展和创新,IT技术也在不断更新和完善。从计算机的出现到互联网的普及,再到现代云计算、人工智能等技术的兴起,IT技术已经成为了…...
linux练习
linux练习 vim编辑器有哪几种工作模式? 命令模式、末行模式、编辑模式 yum的配置文件在什么目录下?具体有哪些字段? 目录:cat /etc/yum.repos.d/*.repo 字段: [] name baseurl enabled gpgcheck 规划分区的命令是什么…...
【【带有握手信号的无符号数乘法verilog+ testbench 代码】】
带有握手信号的无符号数乘法verilog testbench 代码 uumultiplier.v module uumultiplier #(parameter NUMBER1 8 ,parameter NUMBER2 …...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案
一、延迟敏感行业面临的DDoS攻击新挑战 2025年,金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征: AI驱动的自适应攻击:攻击流量模拟真实用户行为,差异率低至0.5%,传统规则引…...
【若依】框架项目部署笔记
参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作: 压缩包下载:http://download.redis.io/releases 1. 上传压缩包,并进入压缩包所在目录,解压到目标…...
【Java多线程从青铜到王者】单例设计模式(八)
wait和sleep的区别 我们的wait也是提供了一个还有超时时间的版本,sleep也是可以指定时间的,也就是说时间一到就会解除阻塞,继续执行 wait和sleep都能被提前唤醒(虽然时间还没有到也可以提前唤醒),wait能被notify提前唤醒…...
Yii2项目自动向GitLab上报Bug
Yii2 项目自动上报Bug 原理 yii2在程序报错时, 会执行指定action, 通过重写ErrorAction, 实现Bug自动提交至GitLab的issue 步骤 配置SiteController中的actions方法 public function actions(){return [error > [class > app\helpers\web\ErrorAction,],];}重写Error…...
