python - 在我的不和谐机器人 python 中从维基百科获取解析器错误
问题描述
我尝试使用的代码如下。这是我使用重写的不和谐机器人discord.py
@client.command()
async def wiki(self, ctx, arg):
await ctx.send(f'Searching for {arg}.')
print(wikipedia.summary(arg))
await ctx.send({arg})
但是,每次我尝试运行时都会收到错误消息,我会收到此错误消息:
/home/pi/.local/lib/python3.7/site-packages/wikipedia/wikipedia.py:389:
UserWarning: No parser was explicitly specified, so I'm using the best available HTML parser
for this system ("lxml"
这通常不是问题,但如果您在另一个系统或不同的虚拟环境中运行此代码,它可能会使用不同的解析器并表现不同。
导致此警告的代码位于文件的
第 389 行/home/pi/.local/lib/python3.7/site-packages/wikipedia/wikipedia.py
。
要消除此警告,请将附加参数传递'features="lxml"'
给 BeautifulSoup 构造函数。
lis = BeautifulSoup(html).find_all('li')
我试过编辑bs4并改变
soup = BeautifulSoup(sys.stdin)
至
soup = BeautifulSoup(sys.stdin, 'html.parser')
但是我还是没弄好,请问discord.py
页面上的 GitHub 会不会比较好?
我不知道任何帮助将不胜感激。
编辑:
我已经更改了我的代码,它似乎工作得很好,但是,我读到在 discord.py 中使用请求并不是一个好主意,因为它会停止你的机器人并可能停止它并导致重新启动。是否可以在没有请求的情况下执行此操作?
@client.command()
async def wiki(self, ctx, *, arg):
input = arg
print(wikipedia.page(input).url)
await ctx.send(f'<{wikipedia.page(input).url}>')
await ctx.send(wikipedia.summary(input, chars=500))
以上是我的新代码,它可以按预期完美运行。我只是想确保我不会以某种方式破坏我的机器人。
解决方案
这不是 discord.py 的问题,而是wikipedia library 的问题。
但是,它应该已经在维基百科的最新开发版本中得到修复。
你是对的,维基百科库使用 requests,并且 requests 是阻塞的。
是否可以在没有请求的情况下执行此操作?
您正在使用 HTTP 请求从 Wikipedia 获取信息,所以没有。
您将需要考虑使用异步库代替,或者使用异步库(例如 aiohttp)自己执行对 Wikipedia API 的请求。
推荐阅读
- html - Chrome PDF 预览未显示在嵌入容器中
- javascript - 何时从服务器重新获取数据与何时仅更新状态
- linux-kernel - 如何将外部构建的应用程序包含到 Yocto 项目/OpenEmbedded Linux 内核映像中
- android - Android 不会连接到 MAMP 的 localhost
- php - 如何在 PHP 中生成正确的 CRAM-MD5 响应?
- guice - guice 可以注入具有 @SuperBuilder 注释的依赖项吗?
- scala - 包含子文件夹的文件夹顶部的分区表,其中包含火花中的 json 文件
- c++ - 如何从工具内部的源代码中获取 LLVM IR 或对象代码(内部 C++ 代码)
- azure-application-insights - 是否可以查询 Kusto 集群以在 Application Insights 上设置监控警报?
- nginx - 用于设置 Nginx 的 CORS 相关变量的 Tarraform 语法是什么?