Python で 3 段階の Web スクレイピングを行う必要があります。最初にスクレイピングする基本ページがいくつかあります。それらのページからいくつかの選択リンクを取得し、それらが指すページを取得して、もう一度繰り返す必要があります。トリックは、すべてのリクエストができるだけ早く開始され、アプリケーション全体が単一のリクエストでブロックされないように、これをすべて非同期で実行したいということです。どうすればいいですか?
この時点まで、次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 または別の非同期サーバーでこれを実行できることはわかっていますが、そのような巨大なライブラリは必要ないので、軽量なものを使用したいと考えています。ただし、提案は受け付けています。