Python asyncio+playwright批量获取deepL翻译

Playwright和Selenium一样,属于动态渲染工具,所以用asyncio异步协程加快一下速度。

大致框架是这样的,能跑是能跑,然而(:3[___]=还有很多需要优化的地方,后面打算整理一下错误处理机制,引入队列,然后封装一下

import asyncio    
from playwright.async_api import async_playwright    # 定义一个异步函数 handle_json,用于处理 JSON 数据  
async def handle_json(json_data):    global tl  # 引用全局变量 tl  #print(json_data)if isinstance(json_data, dict):    tl.append(json_data)  # 如果数据是字典,将其添加到 tl 列表中  elif isinstance(json_data, list):   tl.extend(json_data)  # 如果数据是列表,将其所有元素添加到 tl 列表中  # 定义一个异步函数 handle,用于处理网络请求和响应  
async def handle(request, response):    global result_list if response is not None:  # 如果响应不为空  if response.url=='https://www2.deepl.com/jsonrpc?method=LMT_handle_jobs':  # F12一下,随便翻译点啥,network里找返回翻译结果json数据的urltry:    # 将响应的 JSON 数据传递给 handle_json 函数处理  await handle_json(await response.json())  except:    print('----------------------------')  # 如果解析 JSON 出错,打印错误标记  try:#获取翻译结果result=tl[-1]['result']['translations'][0]['beams'][0]['sentences'][0]['text']result_list.append(result)except Exception as e:#print(f'from func:handle, {tl}')#print(f'from func:handle, {e}')pass # 获取不到就算了(躺#【其实是因为代码结构问题,page.on和异步联用会先返回很多exception,最后才会返回结果,这个我还没想明白怎么优化,之后会再调整# 定义一个异步函数 parse_page,用于解析页面内容  
async def parse_page(sentence, browser):     context = await browser.new_context()  # 创建新的浏览器上下文  page = await context.new_page()  # 在上下文中创建新的页面  # 设置页面请求和响应的监听器  page.on("request", lambda request: handle(request=request, response=None))    page.on("response", lambda response: handle(response=response, request=None))   await page.goto('https://www.deepl.com/translator',timeout=240000)  # 超时时间设置为 240 秒(是的,就是这么稳妥[doge]await page.fill('//*[@id="textareasContainer"]/div[1]/section/div/div[1]/d-textarea/div[1]/p',f'{sentence}\n')#print('定位成功')#print('填充成功') await page.wait_for_timeout(8000)   # 定义一个异步函数 main,用于启动整个程序  
async def main(sentences):    async with async_playwright() as p:  # 创建一个 Playwright 实例  browser = await p.chromium.launch()  # 启动 Chromium 浏览器  tasks = [parse_page(sentence, browser) for sentence in sentences]  # 创建任务列表  # 使用 asyncio.gather 并发执行所有任务,并等待它们完成  await asyncio.gather(*tasks)  await browser.close()  # 关闭浏览器  try:  tl=[]result_list=[]se_list=['1》i do not fell happy today','2》i like to eat fish','3》i love potato very much','4》i am confused','5》help!','6》i want to transform to a tiger','7》nothing happend, i am just unhappy']asyncio.run(main(se_list)) result_list=list(set(item for item in result_list if item))  print(result_list) 
except Exception as e:  print(e)  # 如果出现异常,打印错误信息'''
输出:
['6》我要变身老虎', '3》我非常喜欢土豆', '2》我喜欢吃鱼', '4》我很困惑', '7》什么都没发生,我只是不开心', '1》我今天不开心', '5》帮助!']
'''

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/693296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习速成

一,教程推荐 【(超爽中英!) 2023公认最好的【吴恩达机器学习】教程!附课件代码 Machine Learning Specialization】https://www.bilibili.com/video/BV16C4y197St?vd_sourcedb98a5294f4e914ff8d9b0cad1ee6bda --吴恩达永远的神;然后需要点…

1313:【例3.5】位数问题——(思路非常的奇特,值得一看)

【题目描述】 在所有的N位数中,有多少个数中有偶数个数字33?由于结果可能很大,你只需要输出这个答案对1234512345取余的值。 【输入】 读入一个数N(N≤1000)。 【输出】 输出有多少个数中有偶数个数字3。 【输入样例】 2 【输出样例】 73 这是一道经…

Code-Audit(代码审计)习题记录

介绍: 自己懒得搭建靶场了,靶场地址是 GitHub - CHYbeta/Code-Audit-Challenges: Code-Audit-Challenges为了方便在公网练习,可以随地访问,本文所有的题目均来源于网站HSCSEC-Code Audit 1、习题一 题目内容如下: 1…

How to install a specific version of a package in R

How to install a specific version of a package in R 在使用R语言完成数据分析的过程中,很多时候,因为项目实际需要,我们应该指定某些库文件的安装包的版本,这个时候,我们可以基于devtools包中的函数install_version…

FX110网:easyMarkets易信被评为2023最佳外汇经纪商

easyMarkets 易信目前正在庆祝其进入行业第 23 周年,很高兴地宣布其在 2023 年 TradingView 经纪商奖中被授予“最佳外汇经纪商”称号,这是其第 51 次荣获殊荣奖项。 “我们的共同使命是为交易者提供最好的交易环境和交易工具。 得益于我们全球社区的广泛…

JQuery简介与解析

jQuery是一个快速、小巧、功能丰富的JavaScript库,它简化了HTML文档遍历、事件处理、动画和Ajax等操作。自从2006年由John Resig创建以来,jQuery已经成为Web开发中最受欢迎的JavaScript库之一。以下是对jQuery的简介和一些关键特性的解析,以及…

手把手将 VSCode 快捷键修改为 Eclipse 的快捷键

1.在 vscode 上方搜索栏输入 >keyboard 2. 选择图中红框的内容 3.将Eclipse的常用快捷键复制进去 { "key": "ctrld", "command": "-editor.action.addSelectionToNextFindMatch", "when": "editorFocus" }, {…

微信小程序video 点击自动全屏播放

//因为这个地址可能是图片也可能是视频 点击 图片可以预览&#xff0c;点击视频可放大全屏自动播放。 代码如下 <view v-else :class{contentImg: x.picture.length0} style"margin-top: 10px;"v-for"(x1, y1) in x.picture" :key"y"><…

selenium XPATH 使用简单例子

定位所有的 a 元素&#xff1a; //a 定位带有特定id属性的元素&#xff1a; //*[id“exampleId”] 定位带有特定class属性的元素&#xff1a; //*[contains(class, “exampleClass”)] 定位包含特定文本的元素&#xff1a; //*[text()“Example Text”] 定位包含特定部分文…

说一下 JVM 运行时数据区 ?

目录 一、程序计数器&#xff08;Program Counter Register&#xff09; 二、Java 虚拟机栈&#xff08;Java Virtual Machine Stacks&#xff09; 三、本地方法栈&#xff08;Native Method Stack&#xff09; 四、Java 堆&#xff08;Java Heap&#xff09; 五、方法区&…

我是怎么用静态IP代理为Google账号保驾护航的

我为何要使用到静态IP代理服务 我是一名IT从业者&#xff0c;在很多年前就加入了一家跨国软件公司&#xff0c;日常需要在全世界各地跟甲方沟通&#xff0c;负责的工作中重要的一块就是Google广告&#xff0c;为此公司还特意给配置了一台笔记本电脑。 目录 我为何要使用到静态…

【大厂AI课学习笔记】【2.2机器学习开发任务实例】(9)模型优化

模型训练后&#xff0c;就要进行模型优化了。 一般来讲&#xff0c;很简单&#xff0c;优化就是不换模型换参数&#xff0c;或者直接换模型。 换了之后来对比&#xff0c;最后选个最好的。 比如在本案例中&#xff0c;选择LinearRegression后&#xff0c;MSE从22下降到12&am…

ubuntu分辨率更改、开机被重置、ubuntu屏幕小

ubuntu分辨率更改 分辨率改成&#xff1a;1920x1200 xrandr --size 1920x1200 在此之前可以先输入 xrandr 看支持哪些分辨率 开机被重置 我已经设置成这样了&#xff0c; 一开机变回这个 ubuntu屏幕小 输入命令行 xrandr --size 1920x1200 这个下次重启ubuntu又会重置…

区块链笔记(二)

比特币与以太坊优劣 共同点 两者都是通过在线交易所交易并存储在各种加密钱包中的数字货币。它们也是去中心化的&#xff0c;并使用区块链的分布式账本技术。 区别 以太坊项目将区块链技术在数字货币的基础上进行了延伸&#xff0c;提出打造更为通用的智能合约平台的宏大构…

防御保护第五次作业

​​​​​​​ 1,FW1和FW3组成主备模式的双机热备 2,办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP不能用来转换) 3,分公司设备可以通过总公司的移动链路和电信链路访问到DMz区的http服务器 4,分公司内部的客户端可以通过公网地址访问到内部的…

【笔记】【算法设计与分析 - 北航童咏昕教授】绪论

算法设计与分析 - 北航童咏昕教授 文章目录 算法的定义定义性质 算法的表示自然语言编程语言伪代码 算法的分析算法分析的原则渐近分析 算法的定义 定义 给定计算问题&#xff0c;算法是一系列良定义的计算步骤&#xff0c;逐一执行计算步骤即可得预期的输出。 性质 有穷性确…

使用RK3588开发板使用scp指令互传-windows与开发板互传

MobaXterm 软件网盘下载路径&#xff1a;“iTOP-3588 开发板\02_【iTOP-RK3588 开发板】开发资 料\04_iTOP-3588 开发板所需 PC 软件&#xff08;工具&#xff09;\02-MobaXterm”。 打开 MobaXterm 创建一个 Shell 会话&#xff0c;如下图所示&#xff1a; 设置完成进入终端…

NebulaGraph学习笔记-NgBatis连接

最近项目需要连接NebulaGraph图数据库获取部分数据&#xff0c;于是查看了一些相关资料&#xff0c;发现一个NgBatis框架。 NgBatis是一个使用类似MyBatisMyBatis-Plus的方式操作NebulaGraph的JavaORM框架。同时NgBatis也是一款针对NebulaGraphSpringBoot的数据库ORM框架。借鉴…

5G——物理层仿真

1.前置条件 2.仿真流程 1.填写搜索过程 解&#xff1a; 2.填写每一步细节 2.2.1 准备 解&#xff1a; &#xff08;1&#xff09;BCH &#xff08;2&#xff09;BCCH 解析&#xff1a;因为PBCH是物理广播信道&#xff0c;BCCH是用于广播系统控制信息的下行信道&#…

Facebook元宇宙探索:虚拟社交的新时代

在数字化时代的浪潮中&#xff0c;人类社交的模式和形式正在经历着翻天覆地的变化。而当下&#xff0c;Facebook作为全球最大的社交媒体平台之一&#xff0c;正积极探索着元宇宙的未来。元宇宙被认为是虚拟世界的下一步进化&#xff0c;它将重新定义人们的社交方式、娱乐体验以…