为什么错误“无法在现有事件循环中使用 HTMLSession。改用 AsyncHTMLSession”?

新手上路,请多包涵

我正在运行@Dan-Dev 在他的 回答 中提供的代码。

 from requests_html import HTMLSession

url = 'https://www.thefreedictionary.com/love'
session = HTMLSession()
r = session.get(url)
r.html.render()
lang_bar = r.html.find('#LangBar', first=True)
print(lang_bar.html)

结果是

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-2-ec1d9137b197> in <module>
      8
      9 resp = session.get(url, headers = headers)
---> 10 resp.html.render()
     11
     12 soup = bs(resp.html.html, "lxml")

C:\Anaconda3\lib\site-packages\requests_html.py in render(self, retries, script, wait, scrolldown, sleep, reload, timeout, keep_page)
    584         """
    585
--> 586         self.browser = self.session.browser  # Automatically create a event loop and browser
    587         content = None
    588

C:\Anaconda3\lib\site-packages\requests_html.py in browser(self)
    727             self.loop = asyncio.get_event_loop()
    728             if self.loop.is_running():
--> 729                 raise RuntimeError("Cannot use HTMLSession within an existing event loop. Use AsyncHTMLSession instead.")
    730             self._browser = self.loop.run_until_complete(super().browser)
    731         return self._browser

RuntimeError: Cannot use HTMLSession within an existing event loop. Use AsyncHTMLSession instead.

显然,代码在 Dan-Dev 的计算机上运行良好。你能解释一下为什么我的笔记本电脑返回错误 Cannot use HTMLSession within an existing event loop. Use AsyncHTMLSession instead 吗?

原文由 Akira 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.9k
2 个回答

你可以试试这个:

 import nest_asyncio

nest_asyncio.apply()

session = HTMLSession()
r = session.get("URL")

html_str = r.text

原文由 blondelg 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以将这些代码保存在源文件中,例如“src.py”。然后打开 Anaconda Prompt (假设您正在使用它)并运行此命令(确保您位于包含“src.py”文件的文件夹中)

 python src.py

这个解决方案对我有用。您不应在 Spyder IDE 或 Jupyter Notebook 中运行源文件。

原文由 Ian 发布,翻译遵循 CC BY-SA 4.0 许可协议