如何使用 asyncio 检索抓取的数据
How to retrieve scraped data using asyncio
我是一个新手,正在尝试在 python 中使用异步编程抓取 url 列表并搜索单词。
我的代码如下:
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
def parse(wd, html, url):
add_soup = bsoup(html,'html.parser')
res = []
for para in (add_soup.find_all("p")):
para_txt = para.text
for sent_txt in para_txt.split("."):
if wd in sent_txt:
res.append([sent_txt, url])
return res
async def scrape_urls(wd, urls):
async with aiohttp.ClientSession() as session:
return await asyncio.gather(
*(fetch_and_parse(wd, session, url) for url in urls)
)
async def fetch_and_parse(wd, session, url):
html = await fetch(wd, session, url)
loop = asyncio.get_event_loop()
paras = await loop.run_in_executor(None, parse, html)
return paras
上面的代码是我从这个写的。但我不清楚如何继续检索结果列表
我正在尝试使用此 co = scrape_urls("agriculture", urls)
获取结果。正如预期的那样,我得到了一个协程对象。如何解析协程对象?
不完全确定您遇到的是什么问题。使用 gather
获取 Future 实例后,使用事件循环执行它并获取结果。
loop = asyncio.get_event_loop()
group = scrape_urls("agriculture", urls)
results = loop.run_until_complete(group)
loop.close()
print(results)
我是一个新手,正在尝试在 python 中使用异步编程抓取 url 列表并搜索单词。 我的代码如下:
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
def parse(wd, html, url):
add_soup = bsoup(html,'html.parser')
res = []
for para in (add_soup.find_all("p")):
para_txt = para.text
for sent_txt in para_txt.split("."):
if wd in sent_txt:
res.append([sent_txt, url])
return res
async def scrape_urls(wd, urls):
async with aiohttp.ClientSession() as session:
return await asyncio.gather(
*(fetch_and_parse(wd, session, url) for url in urls)
)
async def fetch_and_parse(wd, session, url):
html = await fetch(wd, session, url)
loop = asyncio.get_event_loop()
paras = await loop.run_in_executor(None, parse, html)
return paras
上面的代码是我从这个
我正在尝试使用此 co = scrape_urls("agriculture", urls)
获取结果。正如预期的那样,我得到了一个协程对象。如何解析协程对象?
不完全确定您遇到的是什么问题。使用 gather
获取 Future 实例后,使用事件循环执行它并获取结果。
loop = asyncio.get_event_loop()
group = scrape_urls("agriculture", urls)
results = loop.run_until_complete(group)
loop.close()
print(results)