1.如何用Python开发一个简单的Webkit浏览器
让我们从最简单的 PyQt 的 Webkit 用例开始吧:输入 url,打开窗口并在窗口中加载页面。
这个例子十分短小,连 import 语句和空行在内也只有 13 行代码。Pythonimport sysfrom PyQt4.QtWebKit import QWebViewfrom PyQt4.QtGui import QApplicationfrom PyQt4.QtCore import QUrlapp = QApplication(sys.argv)browser = QWebView()browser.load(QUrl(sys.argv[1]))browser.show()app.exec_()当你通过命令行将 url 传给脚本时,程序会加载 url 并且在窗口中显示加载完成的页面。
现在,看似你已经有一个“命令行浏览器”啦!至少比 python 的 requests 模块强多了,甚至比 Lynx 还略高一筹,因为我们的浏览器还可以加载 JavaScript 脚本呢。但是目前为止还没有跟 Lynx 拉开差距,因为在启用浏览器的时候只能通过命令行传入 url。
那么,必然需要通过某种方式把需要加载的 url 传入浏览器。没错,就是地址栏!添加地址栏其实地址栏的实现非常简单,我们只需要在窗口顶端加一个输入框就够了。
用户在文本框中输入 url 之后,浏览器就会加载这个地址。下面,我们将用到 QLineEdit 控件来实现输入框。
鉴于我们的浏览器现在有地址栏和浏览器显示框两部分,因此还要给我们的应用增加一个网格布局。Pythonimport sysfrom PyQt4.QtGui import QApplicationfrom PyQt4.QtCore import QUrlfrom PyQt4.QtWebKit import QWebViewfrom PyQt4.QtGui import QGridLayout, QLineEdit, QWidgetclass UrlInput(QLineEdit): def __init__(self, browser): super(UrlInput, self).__init__() self.browser = browser # add event listener on "enter" pressed self.returnPressed.connect(self._return_pressed) def _return_pressed(self): url = QUrl(self.text()) # load url into browser frame browser.load(url)if __name__ == "__main__": app = QApplication(sys.argv) # create grid layout grid = QGridLayout() browser = QWebView() url_input = UrlInput(browser) # url_input at row 1 column 0 of our grid grid.addWidget(url_input, 1, 0) # browser frame at row 2 column 0 of our grid grid.addWidget(browser, 2, 0) # main app window main_frame = QWidget() main_frame.setLayout(grid) main_frame.show() # close app when user closes window sys.exit(app.exec_())到这里,我们已经有一个浏览器的雏形啦!看上去和当年的 Google Chrome 还有几分相像呢,毕竟两者采用了相同的渲染引擎。
现在,你可以在输入框中输入 url ,程序便会将地址传入浏览器,接着渲染出所有的 HTML 页面和 JavaScript 脚本并展示出来。添加开发工具一个浏览器最有趣也最重要的部分是什么?当然是各种各样的开发工具了!一个没有开发者控制台的浏览器怎么能算是浏览器呢?所以,我们的 Python 浏览器当然也要有一些开发者工具才行。
现在,我们就来添加一些类似于 Chrome 的开发者工具中 “Network” 标签的功能吧!这个功能就是简单地追踪浏览器引擎在加载页面的时候所执行的所有请求。在浏览器主页面的下方,我们将通过一个表来显示这些请求。
简单起见,我们只会记录登录的 url、返回的状态码和响应的内容类型。首先我们要通过 QTableWidget 组件创建一个表格,表头包括需要存储的字段名称,表格可以根据每次新插入的记录来自动调整大小。
Pythonclass RequestsTable(QTableWidget): header = ["url", "status", "content-type"] def __init__(self): super(RequestsTable, self).__init__() self.setColumnCount(3) self.(self.header) header = self.horizontalHeader() header.setStretchLastSection(True) header.setResizeMode(QHeaderView.ResizeToContents) def update(self, data): last_row = self.rowCount() next_row = last_row + 1 self.setRowCount(next_row) for col, dat in enumerate(data, 0): if not dat: continue self.setItem(last_row, col, QTableWidgetItem(dat))想要追踪所有请求的话,我们还需要对 PyQt 的内部构件有更深入的了解。了解到,Qt 提供了一个 NetworkAccessManager类作为 API 接口,通过调用它可以监控应用加载页面时所执行的请求。
我们需要自己编写一个继承自 NetworkAccessManager 的子类,添加必要的事件监听器,然后使用我们自己编写的 manager 来通知 webkit 视图执行相应的请求。首先我们需要以 NetworkAccessManager 为基类创建我们自己的网络访问管理器。
Pythonclass Manager(QNetworkAccessManager): def __init__(self, table): QNetworkAccessManager.__init__(self) # add event listener on "load finished" event self.finished.connect(self._finished) self.table = table def _finished(self, reply): """Update table with headers, status code and url. """ headers = reply.rawHeaderPairs() headers = {str(k):str(v) for k,v in headers} content_type = headers.get("Content-Type") url = reply.url().toString() # getting status is bit of a pain status = reply.attribute(QNetworkRequest.) status, ok = status.toInt() self.table.update([url, str(status), content。
2.swift python 学哪个
一、
1. JavaScript
因为JavaScript有Google V8 JIT加持后, 速度快得不行.
不能突出那种统计学意义上的压倒性速度优势
而且Apple自己也在大力优化Webkit等Web项目
跟JavaScript比, 显然是不合时宜的.
把JavasScript秒了, 不是打了Safari团队的脸么?
2. 同理, MacRuby好歹也是半个自己人.
3. Python.
黑Python, 既不会让Python社区反感(我们总是以写得快, 跑得慢自黑的. 哈哈), 又能表现出自己速度快, 给那些不大懂编程的记者们看. 多好!
WOW, 快看Apple再次发明了一个程序语言, 速度秒杀一个叫Python的200倍耶!
4. 地表最好语言 PHP
这个量Apple也没胆量黑.
二、
因为 Swift的很多特性和Python似(Python 是个程序员都会喜欢的语言)。借鉴了很多新语言的新特性。性能却更好,这是个很好的卖的。
一楼说到 JS,我说Swift和JS 根本不像,而和Python却很像。JS是闭包的世界,而Swift本质上OO的,而且JS运用的场景也不一样。说PHP是最好的语言?且不说它主要用来做Web,PHP真的是个很混乱的语言。
3.swift python 学哪个
一、1. JavaScript因为JavaScript有Google V8 JIT加持后, 速度快得不行.不能突出那种统计学意义上的压倒性速度优势而且Apple自己也在大力优化Webkit等Web项目跟JavaScript比, 显然是不合时宜的.把JavasScript秒了, 不是打了Safari团队的脸么?2. 同理, MacRuby好歹也是半个自己人.3. Python.黑Python, 既不会让Python社区反感(我们总是以写得快, 跑得慢自黑的. 哈哈), 又能表现出自己速度快, 给那些不大懂编程的记者们看. 多好!WOW, 快看Apple再次发明了一个程序语言, 速度秒杀一个叫Python的200倍耶!4. 地表最好语言 PHP这个量Apple也没胆量黑.二、因为 Swift的很多特性和Python似(Python 是个程序员都会喜欢的语言)。
借鉴了很多新语言的新特性。性能却更好,这是个很好的卖的。
一楼说到 JS,我说Swift和JS 根本不像,而和Python却很像。JS是闭包的世界,而Swift本质上OO的,而且JS运用的场景也不一样。
说PHP是最好的语言?且不说它主要用来做Web,PHP真的是个很混乱的语言。
4.Python的GUI框架PySide怎么安装配置方法
PySide的安装:(1)比较快捷省事的安装 dizzy@dizzy-pc:~$ sudo add-apt-repository ppa:pyside You are about to add the following PPA to your system: Official Ubuntu packages for PySide Qt Bindings.dizzy@dizzy-pc:~$ sudo apt-get update# 。
。 dizzy@dizzy-pc:~$ sudo apt-get install python-pyside Reading package lists。
Done Building dependency tree Reading state information。 Done The following extra packages will be installed: libphonon4 libpyside1.1 libqt4-help libqt4-scripttools libqt4-test libqtwebkit4 libshiboken1.1 phonon phonon-backend-gstreamer python-pyside.phonon python-pyside.qtcore python-pyside.qtdeclarative python-pyside.qtgui python-pyside.qthelp python-pyside.qtnetwork python-pyside.qtopengl python-pyside.qtscript python-pyside.qtsql python-pyside.qtsvg python-pyside.qttest python-pyside.qtuitools python-pyside.qtwebkit python-pyside.qtxml (2)测试是否安装成功 dizzy@dizzy-pc:~$ python Python 2.7.3 (default, Feb 27 2014, 20:00:17) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information.>>> import PySide>>> dir(PySide) 代码如下:['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '__version__', '__version_info__']>>> PySide.__version__'1.1.2'>>> PySide.QtCore.__version__'4.8.1' (三)PySide初试# -*- coding: utf-8 -*-# Import PySide classes import sys from PySide.QtCore import * from PySide.QtGui import *# Create a Qt application app = QApplication(sys.argv)# Create a Label and show it label = QLabel("Hello World") label.show()# Enter Qt application main loop app.exec_() sys.exit() 这样运行就能够看到一个最简单的窗口了。
Hello World。(四)Hello,PySide 第一个使用PySide的例子,新建一个Hello.py文件,然后输入下面的内容:# Import PySide classes import sys from PySide.QtCore import * from PySide.QtGui import * # Create a Qt application app = QApplication(sys.argv) # Create a Label and show it label = QLabel("Hello World") label.show() # Enter Qt application main loop app.exec_() sys.exit()。
5.python爬取的网络数据嬖趍ysql中怎么实现
动态网页抓取都是典型的办法
直接查看动态网页的加载规则。如果是ajax,则将ajax请求找出来给python。 如果是js去处后生成的URL。就要阅读JS,搞清楚规则。再让python生成URL。这就是常用办法
办法2,使用python调用webkit内核的,IE内核,或者是firefox内核的浏览器。然后将浏览结果保存下来。通常可以使用浏览器测试框架。它们内置了这些功能
办法3,通过http proxy,抓取内容并进行组装。甚至可以嵌入自己的js脚本进行hook. 这个方法通常用于系统的反向工程软件
转载请注明出处代码入门网 » webkitpython