多语言展示
当前在线:243今日阅读:39今日分享:10

如何正确配置asyncio协程爬虫

爬虫大家应该有一些了解,那就是获取网页,然后开始解析网页的链接把它们加入到队列里面,进行并发获取网页资源,有时候我们需要一个最大数目的运行,实现任何时候都可以完成一个网页的获取,那么接下来我们就简单的简介一下。
工具/原料
1

计算机

2

虚拟机

方法/步骤
1

首先使用Python标准库中的同步队列,每次有新的一项加入,队列增加它的tasks计数器,线程完成一个任务后调用task_done,主线程阻塞在Queue.join,直到tasks计数器与task_done调用次数相匹配,导入线程。

2

然后把线程的共享状态收集在一个名为crawler的类中,主要的逻辑写在crawl方法中,在一个协程中启动crawl运行asyncio的事件循环直到crawl完成。

3

接着使用crawler线程,用一个根URL和最大重定向数max_redirect来初始化,它把 URL, max_redirect序列对放入队列中。

4

在队列中未完成的任务数是输出1,然后回到主程序里面,启动事件循环和crawl方法,crawl协程把worker们赶起来干活,它像一个主线程阻塞在join上直到所有任务完成,同时worker在后台运行。

5

接下来如果worker是线程,可能不会一次把它们全部创建出来,为了避免创建线程的昂贵代价,通常一个线程池会按需增长,但是协程很廉价,可以直接把他们全部创建出来。

6

最后生成器被throw抛出一个异常,如过生成器的调用堆栈中没有捕获异常的代码,这个异常被传递到顶层,所以注销协程任何时候生成器暂停,在某些yield from语句它恢复并且抛出一个异常处理注销。

推荐信息