我昨天写了一个Python网络刮刀,并在我的终端上运行了一夜。它只通过50k页。所以现在我只有一堆终端同时在不同的起点和终点运行脚本。这很好用,因为主要的滞后显然是打开网页,而不是实际的CPU负载。更优雅的方式来做到这一点?特别是如果它可以在当地完成
答案 0 :(得分:4)
您有一个I / O绑定进程,因此为了加快速度,您需要同时发送请求。这并不一定需要多个处理器,您只需要在发送下一个请求之前避免等待一个请求。
这个问题有很多解决方案。请查看this blog post或查看gevent,asyncio(向3.4版本的Python提供后向移植)或其他异步IO库。
但是,在抓取其他网站时,您必须记住:您可以通过并发编程非常快速地发送请求,但根据您正在抓取的网站,这可能非常粗鲁。您可以轻松地将一个小型站点完全提供给动态内容,从而迫使管理员阻止您。尊重robots.txt
,尝试一次在多台服务器之间分散工作,而不是将整个带宽集中在一台服务器上,并小心地将您的请求限制在单台服务器上,除非您确定不需要到。