PyQt4 を使用して Python スクリプトを作成し、AJAX を含む Web ページをクロールします。うまくいきましたが、画面の解像度に関連すると思われる「1画面」のページしか取得できません。X環境を持たないCentOSサーバーでスクリプトを実行します。Xvfbを使用し、次の設定を行います。
$ Xvfb :100 -screen 0 9000x9000x24 &
$ export DISPLAY=:100
しかし、より多くの Web 情報を取得しても役に立ちませんでした。
私はPyQt4が初めてです。表示ウィンドウのサイズを拡大するために QWebView のサイズを設定する方法はありますか?
QtWebkit に関するマニュアルも大歓迎です。
以下は私のコードです:
#!/usr/bin/env python
#coding: utf-8
import sys
from PyQt4.QtCore import QUrl, SIGNAL, QSize
from PyQt4.QtGui import QApplication
from PyQt4.QtWebKit import QWebPage, QWebView, QWebSettings
class WebPage(QWebPage):
def javaScriptConsoleMessage(self, message, lineNumber, sourceID):
sys.stderr.write('Javascritp error at line number %d\n' % (lineNumber))
sys.stderr.write('%s\n' % (message, ))
sys.stderr.write('Source ID: %s\n' % (sourceID, ))
class Crawler(QApplication):
def __init__(self, url):
super(Crawler, self).__init__(sys.argv)
self.url = url
self.web_view = QWebView()
self.web_page = WebPage()
self.web_view.setPage(self.web_page)
self.web_frame = self.web_page.currentFrame()
print 'Before connecting'
self.connect(self.web_view, SIGNAL('loadFinished(bool)'), self.loadFinished)
print 'After connecting'
print 'Before loading'
self.web_frame.load(QUrl(self.url))
print 'After loading'
def loadFinished(self, ok):
self.web_page.setViewportSize(self.web_page.mainFrame().contentsSize())
print 'In callback, before writing'
with open('jd.txt', 'ab+') as fp:
fp.write(self.web_page.currentFrame().toHtml().toUtf8())
print 'In callback, after writing'
if __name__ == '__main__':
url = 'http://www.360buy.com/product/707047.html'
crawler = Crawler(url)
sys.exit(crawler.exec_())