特定の Web ページの HTML を返す次のクラスがあります。
from PyQt4.QtCore import QUrl, SIGNAL
from PyQt4.QtGui import QApplication
from PyQt4.QtWebKit import QWebPage
from bs4 import BeautifulSoup
from bs4.dammit import UnicodeDammit
import sys
import signal
class Render(QWebPage):
def __init__(self, url):
self.app = QApplication(sys.argv)
QWebPage.__init__(self)
self.html = None
signal.signal(signal.SIGINT, signal.SIG_DFL)
self.connect(self, SIGNAL('loadFinished(bool)'), self._finished_loading)
self.mainFrame().load(QUrl(url))
self.app.exec_()
def _finished_loading(self, result):
self.html = self.mainFrame().toHtml()
self.soup = BeautifulSoup(UnicodeDammit(self.html).unicode_markup)
self.app.quit()
そして、次のように、実行する必要がある JavaScript を使用して WebPages のリストを反復処理するループがあります。
l = ["http://host.com/page1", "http://host.com/page2"]
for page in l:
soup = Render(page).soup
#Do-something
問題は、読み込まれた最初のページでのみ JavaScript コードが実行され、その後は解釈されないことです。