Я пытаюсь использовать библиотеку requests_html
с рендерингом js вместе с FastAPI
:
script.py
from fastapi import FastAPI
from requests_html import HTMLSession
app = FastAPI()
@app.get('/')
def func():
with HTMLSession() as session:
r = session.get('https://stackoverflow.com')
r.html.render()
return r.text
при запуске с использованием uvicorn script:app --reload
и доступе к http://127.0.0.1:8000/
, я получаю следующую ошибку:
...
r.html.render()
File "c:\users\a\appdata\local\programs\python\python37\lib\site-packages\requests_html.py", line 586, in render
self.browser = self.session.browser # Automatically create a event loop and browser
File "c:\users\a\appdata\local\programs\python\python37\lib\site-packages\requests_html.py", line 727, in browser
self.loop = asyncio.get_event_loop()
File "c:\users\a\appdata\local\programs\python\python37\lib\asyncio\events.py", line 644, in get_event_loop
% threading.current_thread().name)
RuntimeError: There is no current event loop in thread 'ThreadPoolExecutor-0_0'.
Любая идея, как я могу заставить их работать вместе?
Вы должны использовать AsyncHTMLSession в Uvicorn.
from fastapi import FastAPI
from requests_html import AsyncHTMLSession
app = FastAPI()
@app.get('/')
async def func():
asession = AsyncHTMLSession()
r = await asession.get('https://stackoverflow.org/')
await r.html.arender()
return r.text
пожалуйста, замените "r.html.arender()" на "ожидание r.html.arender()"
Отлично работает, спасибо. Я также получаю это предупреждение при первом запросе ``` .\scratch.py:13: RuntimeWarning: сопрограмма 'HTML.arender' никогда не ожидалась r.html.arender() RuntimeWarning: включите tracemalloc, чтобы получить трассировку распределения объектов `` ` это проблема?