起点是Spyder IDE
>Spyder IDE (5.1.0)
>
>The Scientific Python Development Environment | Spyder-IDE.org
>
>Python 3.8.5 64-bit | Qt 5.12.9 | PyQt5 5.12.3 | Linux 5.4.0-81-generic
我想做什么? 刮一个棘手的博客,似乎blogspot是混淆了很多,但在Spyder,我有时发现我甚至不能刮我自己的主页
import asyncio
from requests_html import AsyncHTMLSession, HTML, HTMLSession
from bs4 import BeautifulSoup as bs
import re
import os, os.path
from pathlib2 import Path
from collections import OrderedDict as Odict
from datetime import datetime, date, timedelta
import pytz
import unicodedata
import sys
# asession = AsyncHTMLSession()
ass = AsyncHTMLSession()
sss = HTMLSession()
url='http://localhost/index.html'
def syncurl(session=None, url=None):
r = session.get(url)
return r
async def asyncurl(session=None, url=None):
r = await session.get(url)
#if r.status_code == 200:
#await r.html.arender()
return r
def gurl(ass, url):
fiz = lambda : asyncurl(ass, url)
foz = ass.run(fiz)
return foz
所以如果我在Spyder中运行它,然后执行,我会得到预期的“循环已经运行”垃圾
gurl(ass,url)
Traceback (most recent call last):
File "<ipython-input-2-ebc91fe79d44>", line 1, in <module>
gurl(ass,url)
File "/home/user/PycharmProjects/blogscrape/BlogScraping/asynctest.py", line 38, in gurl
foz = ass.run(fiz)
File "/opt/anaconda3/lib/python3.8/site-packages/requests_html.py", line 774, in run
done, _ = self.loop.run_until_complete(asyncio.wait(tasks))
File "/opt/anaconda3/lib/python3.8/asyncio/base_events.py", line 592, in run_until_complete
self._check_running()
File "/opt/anaconda3/lib/python3.8/asyncio/base_events.py", line 552, in _check_running
raise RuntimeError(f'This event loop is already running : {self._thread_id}')
RuntimeError: This event loop is already running : 139750638774080
我不想在这里重新发明轮子,我相信很多其他人都有这个问题,但到目前为止,我还没有看到一个简洁的答案(除了Spyder bug等)。 我只想让它在Spyder工作(主要是因为我喜欢和熊猫一起玩,看看结果)。 我想其中一种方法是作为独立脚本运行,将结果保存到pickle中,然后使用spyder重新加载数据帧并使用它。但是,嘿,为什么这是必要的
主要的问题是html请求不够清晰。这个错误对于任何试图解决…的原始问题的人来说都是非常不透明的
RuntimeError: Cannot use HTMLSession within an existing event loop. Use AsyncHTMLSession instead.
是的,我试着用谷歌搜索这个问题,但他们总是开始谈论“异步”之类的东西。我正在阅读'requests-html'帮助,任何超出此范围的内容都高于我的薪资等级(目前为零)
有什么建议吗? (只有简单的IC设计师能够理解的asyncio中的简单内容)
谢谢@Daniel, 是的,这似乎确实有效,可以解决上述问题。但它不是100%完美,因为有时我会出现超时错误,我不知道为什么,但我不再出现超时错误
就为了把它放在一个地方。。在安装之后
只需将以下内容添加到python代码中
这足以让代码在Spyder中运行(因为这是最初的问题)
在“asyncurl”的代码中添加额外的睡眠/超时允许脚本运行,尽管速度很慢,所以不要尝试在脚本中运行太多调用。上述函数修改如下
相关问题 更多 >
编程相关推荐