首页 > 解决方案 > 在我的不和谐机器人 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))

以上是我的新代码,它可以按预期完美运行。我只是想确保我不会以某种方式破坏我的机器人。

标签: pythonpython-3.xdiscord.py

解决方案


这不是 discord.py 的问题,而是wikipedia library 的问题
但是,它应该已经在维基百科的最新开发版本中得到修复。

你是对的,维基百科库使用 requests,并且 requests 是阻塞的。

是否可以在没有请求的情况下执行此操作?

您正在使用 HTTP 请求从 Wikipedia 获取信息,所以没有。
您将需要考虑使用异步库代替,或者使用异步库(例如 aiohttp)自己执行对 Wikipedia API 的请求。


推荐阅读