首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行HTMLrequests()时的Tracemalloc错误

运行HTMLrequests()时的Tracemalloc错误
EN

Stack Overflow用户
提问于 2021-01-12 10:15:22
回答 1查看 71关注 0票数 1

我正在写一个不和谐的机器人,它发送一个网络钩子,包括从网站上刮来的信息。

刮取信息的功能如下:

代码语言:javascript
复制
import json
from requests_html import AsyncHTMLSession
import requests_html
import nest_asyncio
from bs4 import BeautifulSoup


class Product:

    def __init__(self, url):
        self._url = url

    def get_sizes_prices(self):
        nest_asyncio.apply()
        asession = AsyncHTMLSession()

        # create session from given endpoint with keywords/sku
        async def get_url():
            slug = asession.get('a special URL' + self._url)

        result = asession.run(get_url())
        result_slug = result.html

        **Some more code down there which gets some special things from the scraped website**
        return **variables**

在运行此操作时,我将收到以下错误:

代码语言:javascript
复制
Ignoring exception in on_message
Traceback (most recent call last):
  File "C:\Users\lucab\PycharmProjects\untitled\venv\lib\site-packages\discord\client.py", line 333, in _run_event
    await coro(*args, **kwargs)
  File "C:/Users/lucab/OneDrive/Bots_-Coding/NexusTools/restocksscraper/main.py", line 15, in on_message
    array = product_obj.get_sizes_prices()
  File "C:\Users\lucab\OneDrive\Bots_-Coding\NexusTools\restocksscraper\get_product.py", line 21, in get_sizes_prices
    results = asession.run(getlink())
  File "C:\Users\lucab\PycharmProjects\untitled\venv\lib\site-packages\requests_html.py", line 772, in run
    asyncio.ensure_future(coro()) for coro in coros
  File "C:\Users\lucab\PycharmProjects\untitled\venv\lib\site-packages\requests_html.py", line 772, in <listcomp>
    asyncio.ensure_future(coro()) for coro in coros
TypeError: 'coroutine' object is not callable
C:\Users\lucab\PycharmProjects\untitled\venv\lib\site-packages\discord\client.py:340: RuntimeWarning: coroutine 'Product.get_sizes_prices.<locals>.getlink' was never awaited
  pass
RuntimeWarning: Enable tracemalloc to get the object allocation traceback

firstI只使用HTMLSession(),在检查文档之后,我使用AsyncHTMLSession,bc --这是requests_html(https://pypi.org/project/requests-html/)推荐的

还有我的不和-博特-密码:

代码语言:javascript
复制
import discord , os
from dotenv import load_dotenv
from get_product import Product

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
client = discord.Client()

@client.event
async def on_message(message):
    if message.content.startswith('!test'):
        product = message.content
        product.replace('!test', '') #to only get the string after the !test command
        product_obj = Product(product)
        array = product_obj.get_sizes_prices() #the return values are stored in "array"

        varembed = discord.Embed(
            title = "XXXXXX",
            description='SKU: '+XXXXX,
            url = XXXXXX,
            color = discord.Colour.darker_grey(),
        )
        varembed.set_footer(text="XXXX" )

        for i in array[0]:
            for x in array[1]:
                varembed.add_field(name="",value="", inline=True)

        await message.channel.send(embed=varembed)

client.run(TOKEN)

编辑:对我起作用的是:通过等待调用不和谐的机器人中的函数:

代码语言:javascript
复制
array = await product_obj.get_sizes_prices()

将异步设置为函数本身:

代码语言:javascript
复制
async def get_sizes_prices(self):

并设置async_session等待:

代码语言:javascript
复制
result = await async_session.get('some url' + self._url)
result_slug = result.text
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-12 12:28:49

此错误通常是由您而不是异步函数的await引起的。在这种情况下,我认为这是在调用get_url().I时造成的,假设您创建了该嵌入式函数,因为它要求您等待asession.get,而您不能这样做,因为get_sizes_prices也不是异步函数。

下面是一些未经测试的代码,可以解决您的问题。

代码语言:javascript
复制
async def get_sizes_prices(self):
    nest_asyncio.apply()
    asession = AsyncHTMLSession()

    # create session from given endpoint with keywords/sku
    response = await asession.get('a special URL' + self._url)

    result_slug = response.html

我所做的是删除嵌入式函数。将await语句添加到asession.get中,并使整个函数异步。因此,您还需要await这个函数,无论您首先在何处调用它。

我使用文档这里作为需要等待或不等待的方法的参考。希望能解决你的问题:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65681896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档