python 使用asyncio和aiohttp的scrapper的一个例子

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 使用asyncio和aiohttp的scrapper的一个例子相关的知识,希望对你有一定的参考价值。

import asyncio
import aiohttp
import bs4
import tqdm


@asyncio.coroutine
def get(*args, **kwargs):
    response = yield from aiohttp.request('GET', *args, **kwargs)
    return (yield from response.read_and_close(decode=True))


@asyncio.coroutine
def wait_with_progress(coros):
    for f in tqdm.tqdm(asyncio.as_completed(coros), total=len(coros)):
        yield from f


def first_magnet(page):
    soup = bs4.BeautifulSoup(page)
    a = soup.find('a', title='Download this torrent using magnet')
    return a['href']


@asyncio.coroutine
def print_magnet(query):
    url = 'http://thepiratebay.se/search/{}/0/7/0'.format(query)
    with (yield from sem):
        page = yield from get(url, compress=True)
    magnet = first_magnet(page)
    print('{}: {}'.format(query, magnet))


distros = ['archlinux', 'ubuntu', 'debian']
sem = asyncio.Semaphore(5)
loop = asyncio.get_event_loop()
f = asyncio.wait([print_magnet(d) for d in distros])
loop.run_until_complete(f)

以上是关于python 使用asyncio和aiohttp的scrapper的一个例子的主要内容,如果未能解决你的问题,请参考以下文章

python 使用asyncio和aiohttp的scrapper的一个例子

python asyncio 异步 I/O - 实现并发http请求(asyncio + aiohttp)

python 使用Python的aiohttp和asyncio进行多个异步HTTP GET请求

Python有了asyncio和aiohttp在爬虫这类型IO任务中多线程/多进程还有存在的必要吗?

Python学习---IO的异步[asyncio +aiohttp模块]

Python asyncio/aiohttp:ValueError:Windows 上 select() 中的文件描述符过多