Search code examples
python-3.xpython-requests-html

Why is the error "Cannot use HTMLSession within an existing event loop. Use AsyncHTMLSession instead"?


I'm running the code provided by @Dan-Dev in his answer.

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)

and the result is

---------------------------------------------------------------------------
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.

Clearly, the code runs fine in Dan-Dev's computer. Could you please explain why my laptop returns an error Cannot use HTMLSession within an existing event loop. Use AsyncHTMLSession instead?


Solution

  • You may try this:

    import nest_asyncio
    
    nest_asyncio.apply()
    
    session = HTMLSession()
    r = session.get("URL")
    
    html_str = r.text