PythonスクレイプAJAXサイトを使用したいので、この投稿を参照しました:http: //blog.motane.lu/2009/06/18/pywebkitgtk-execute-javascript-from-python/gtk とpywebkitgtkを使用します。
しかし、ページを同時にクロールする方法(マルチスレッド)を知りたいです。
以下にコードを記述しますが、関数do_crawlはpool.apply_asyncから呼び出すことができないようです。pool.applyを使用すると、do_crawlが呼び出されます。
import gtk
import webkit
from multiprocessing.pool import ThreadPool
class WebView(webkit.WebView):
def get_html(self):
self.execute_script('oldtitle=document.title;document.title=document.documentElement.innerHTML;')
html = self.get_main_frame().get_title()
self.execute_script('document.title=oldtitle;')
return html
class Crawler(gtk.Window):
def __init__(self, url):
gtk.gdk.threads_init() # suggested by Nicholas Herriot for Ubuntu Koala
gtk.Window.__init__(self)
self._url = url
def crawl(self):
view = WebView()
view.open(self._url)
view.connect('load-finished', self._finished_loading)
self.add(view)
gtk.main()
def _finished_loading(self, view, frame):
view.get_html()
gtk.main_quit()
def main():
pool = ThreadPool(10)
[pool.apply_async(do_crawl, ('http://google.com/')) for i in range(100)]
pool.join()
def do_crawl(url):
crawler = Crawler(url)
crawler.crawl()
if __name__ == '__main__':
main(
)