我需要在 Python 中进行一些三步网页抓取。我最初抓取了几个基本页面,我需要从这些页面中获取一些选择链接并检索它们指向的页面,然后再重复一次。诀窍是我想异步执行所有这些操作,以便尽快触发每个请求,并且不会因单个请求而阻塞整个应用程序。我该怎么做?
到目前为止,我一直在使用 进行一步抓取eventlet
,如下所示:
urls = ['http://example.com', '...']
def scrape_page(url):
"""Gets the data from the web page."""
body = eventlet.green.urllib2.urlopen(url).read()
# Do something with body
return data
pool = eventlet.GreenPool()
for data in pool.imap(screen_scrape, urls):
# Handle the data...
但是,如果我扩展此技术并包含一个嵌套GreenPool.imap
循环,它会阻塞,直到该组中的所有请求都完成,这意味着应用程序无法根据需要启动更多请求。
我知道我可以使用 Twisted 或其他异步服务器来做到这一点,但我不需要这么大的库,我宁愿使用轻量级的东西。不过,我愿意接受建议。