QtWebKit

WekKit官网:http://www.webkit.org/

QtWebKit官网及安装:http://trac.webkit.org/wiki/QtWebKit#GettingInvolved

QtWebKit Class Reference:http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qtwebkit.html

QtWebKit也可以在PyQt4的安装中顺带安装(http://blog.csdn.net/xiarendeniao/article/details/6774520 46条)

1.用python的urllib库从服务端读取web页面(html+js)

[python] 
view plain
copy
 
  1. #encoding=utf-8
  2. import urllib, urlparse
  3. if __name__ == '__main__':
  4. baseUrl = 'http://s.weibo.com/weibo/'
  5. wordList = ['python','c++','钓鱼岛', '博圣云峰', '加勒比海盗', '海贼王', '2012', '世界末日', '地球']
  6. for index in range(len(wordList)):
  7. url = urlparse.urljoin(baseUrl, urllib.quote(urllib.quote(wordList[index])))
  8. print url
  9. conn = urllib.urlopen(url)
  10. data = conn.read()
  11. f = file('/tmp/%s' % (wordList[index]), 'w')
  12. f.write(data)
  13. f.close()

2.用QtWebKit解析web页面(html+js)

[python] 
view plain
copy
 
  1. #!/usr/bin/env python
  2. #encoding=utf-8
  3. import sys
  4. from PyQt4.QtGui import *
  5. from PyQt4.QtCore import *
  6. from PyQt4.QtWebKit import *
  7. import time
  8. class Render(QWebPage):
  9. def __init__(self):
  10. self.wordList = ['python','c++','钓鱼岛', '博圣云峰', '加勒比海盗', '海贼王', '2012', '世界末日', '地球']
  11. self.index = 0
  12. self.app = QApplication(sys.argv)
  13. QWebPage.__init__(self)
  14. self.loadFinished.connect(self._loadFinished)
  15. self.mainFrame().setHtml(file('/tmp/%s'%self.wordList[self.index], 'r').read())
  16. self.app.exec_()
  17. def _loadFinished(self, result):
  18. file('/home/dongsong/桌面/%s.html'%self.wordList[self.index],'w').write(unicode(self.mainFrame().toHtml()).encode('utf-8'))
  19. self.index += 1
  20. if self.index >= len(self.wordList):
  21. self.app.quit()
  22. else:
  23. self.mainFrame().setHtml(file('/tmp/%s'%self.wordList[self.index], 'r').read())
  24. page = Render()

PS:可以用self.mainFrame().load(QUrl('http://s.weibo.com/python')直接访问页面并解析(html+js),上述示例只是为了演示如何解析已经读取到的pageData

[plain] 
view plain
copy
 
  1. export DISPLAY=:0
  2. vpython qt_load_2.py


上一篇:每天一个设计模式-7 生成器模式(Builder)


下一篇:atitit.组件化事件化的编程模型--服务端控件(1)---------服务端控件与标签的关系