pythonwebkit

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.python爬取的网络数据嬖趍ysql中怎么实现

动态网页抓取都是典型的办法

直接查看动态网页的加载规则。如果是ajax,则将ajax请求找出来给python。 如果是js去处后生成的URL。就要阅读JS,搞清楚规则。再让python生成URL。这就是常用办法

办法2,使用python调用webkit内核的,IE内核,或者是firefox内核的浏览器。然后将浏览结果保存下来。通常可以使用浏览器测试框架。它们内置了这些功能

办法3,通过work 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中return到底什么意思

return,就是函数返回传。

每一个函数都必须有一个返回值的,如果函数中没有写return,默认返回为None对象

比如:

def add(a,b):

return a+b

print add(2,3)

以上会得到输出5

而:

def add1(a,b):

c=a+b

print add1(2,3)

以上会输出None,因为函数没有return,所以add1没有返回值

pythonwebkit

转载请注明出处代码入门网 » pythonwebkit

资讯

pythontrue

阅读(6)

本文主要为您介绍pythontrue,内容包括true在Python里面的意思,在Python中怎么表达True,在Python中怎么表达True。为False的几种情况:1. 0为False,其他所有数值皆为True2. 空串("")为False,其他所有字符串皆为True3. 空

资讯

python微信机器人

阅读(5)

本文主要为您介绍python微信机器人,内容包括如何用Python做一个微信自动拉群机器人,用Python做微信机器人,但电脑不可能一直开机,一关机它就停止运,python微信机器人为什么不能拉人进群。Python简单易学、免费开源、高层语言、可移植性超强

资讯

pythonexecute()

阅读(5)

本文主要为您介绍pythonexecute(),内容包括如何通过Python的字符串变量的execute()方法调用DOS命令搜,pythonexecute语句中有变量怎么写,pythonexecute语句中有变量怎么写。(1)os.system# 仅仅在一个子终端运行系统命令,而不能获取命令执行后

资讯

linux安装pippython

阅读(8)

本文主要为您介绍linux安装pippython,内容包括linux下怎么用pip安装python的包,linux下怎么用pip安装python的包,如何在ubuntu上安装python和pip。Linux上Python是默认安装的,但是Python2和Python3只会默认安装一个,安装方法,在终端中(Ctrl+Alt

资讯

python3卸载

阅读(6)

本文主要为您介绍python3卸载,内容包括编译安装的python3怎么卸载,如何卸载python3.2.1,python怎么卸载干净。可以,如果需要装python2.7和python3.6两个版本的话,分别安装就可以,两个版本的python安装路径不一样,不影响。win

资讯

centospython安装pip

阅读(6)

本文主要为您介绍centospython安装pip,内容包括如何在centos中安装pip,如何在centos6.4上安装pip,centos怎么安装pythonpip。1. 软件的安装方法比较简单,整个过程中只有同意协议一个选项,其它步骤全部只要下一步就可以完成安装,当然如果你要更

资讯

pythonfor两个list

阅读(6)

本文主要为您介绍pythonfor两个list,内容包括Python中for循环两个列表要怎么使用,在python中如何将两个list合并成一个list,不用for语句,如何用Python比较两个列表,并进行合并如何用Python比较两个列。除了直接相加(生成新的list),还有两种方

资讯

httppythonpost

阅读(7)

本文主要为您介绍httppythonpost,内容包括如何用Python写一个httppost请求,如何用Python写一个httppost请求,如何用Python写一个httppost请求。import requestss = requests.session()login_data = {email: ***, passw

资讯

webkitpython

阅读(8)

本文主要为您介绍webkitpython,内容包括如何用Python开发一个简单的Webkit浏览器,如何用Python开发一个简单的Webkit浏览器,swiftpython学哪个。让我们从最简单的 PyQt 的 Webkit 用例开始吧:输入 url,打开窗口并在窗口中加载页面。这个例子

资讯

python格式化日期

阅读(6)

本文主要为您介绍python格式化日期,内容包括python,格式化时间实例,求,Python如何输出指定格式的日期,Python怎么格式化时间。对于像Wed, 11 Apr 2012 09:37:05 +0800的时间格式化可如下解:>>> date=Wed, 11 Apr 20

资讯

python3get()

阅读(6)

本文主要为您介绍python3get(),内容包括python3requests.get获取不到完整的页面,求大佬指导,python3的requests.get都请求参数,python3.x中用cgi的get方式实现中文参数的的传递,但是总是出错,应。def openUrl(url):import urllib2url = htt

资讯

python字符串删除字符

阅读(7)

本文主要为您介绍python字符串删除字符,内容包括python如何去除字符串中不想要的字符,Python如何删除字符串的最后3个字符,python怎么把字符串第一个字符去掉。问题:过滤用户输入中前后多余的空白字符 ++++abc123--- 过滤某windows下编辑文

资讯

pythoncoding

阅读(9)

本文主要为您介绍pythoncoding,内容包括python中#coding:gbk有什么用,Pythoncoding用,SublimeText与Pycharm哪个更好,怎么在python加入#/usr/bin/envpythoncoding=utf8。它是一种编码格式,简单说明是:文件说明指令来确定不同的环境进行不同的

资讯

python覆盖

阅读(6)

本文主要为您介绍python覆盖,内容包括求教Python升版本后怎么覆盖原版本,求教Python升版本后怎么覆盖原版本,关于python的覆盖cmp的两点问题。__cmp__对 int、str 等内置数据类型排序时,Python的 sorted() 按照默认的比较函数 cmp 排序,但是,如

资讯

mac使用python

阅读(2)

本文主要为您介绍mac使用python,内容包括怎么在mac上使用python,mac怎么运行python,有用mac学习/使用python的吗。如果要使用 Python 2 来运行此文件,因为 OS X 自带 Python 2,所以直接输入1搜索python "python"文件

资讯

python引用函数

阅读(2)

本文主要为您介绍python引用函数,内容包括python怎么调用函数,python怎么调用函数中的函数,python的调用函数怎么用。如果你用C给Matlab写过MEX程序,那么这个问题是很容易理解的(好像每次讨论Python问题时我总是把Matlab搬了出来…… 《在

资讯

python%d%s

阅读(2)

本文主要为您介绍python%d%s,内容包括Python编程里面"%s和%d"都是什么意思呀,Python里的"%s和%d"都是什么意思,小白学python的问题关于%d和%s的区别。%s表示格化式一个对象为字符。%d表示整数。拓展资料:refactoring的基本方法就是每一步小小变

资讯

pythonlist(range)

阅读(2)

本文主要为您介绍pythonlist(range),内容包括如何利用python语言中list和range结合起来使用,PythonPython语句list(range(1,10,3))执行结果为([1,4,7],如何结合python中的List和range生成列表元素。方法/步骤第一步,range()函数添加一个参数,如

资讯

python空对象

阅读(2)

本文主要为您介绍python空对象,内容包括python空值用什么表示,如何判断pythonobjects.get对象为空,Python中None和'空字符串的区别。1.首先要了解Pythond的对象的概念:Python中,万物皆对象,所有的操作都是针对对象的,那什么是对象,5是一个in

资讯

c语言调用python

阅读(2)

本文主要为您介绍c语言调用python,内容包括C语言程序如何调用python程序,C语言程序如何调用python程序,如何在C语言中调用python函数。下面是一个例子:首先是python的一个简单函数class Hell

资讯

python函数套函数

阅读(2)

本文主要为您介绍python函数套函数,内容包括Python中什么是闭包,python返回函数有什么用为什么要套一层函数再返回,python一个函数怎么使用另一个函数内的变量。闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的

资讯

python2.7ubuntu

阅读(2)

本文主要为您介绍python2.7ubuntu,内容包括如何在ubuntu上安装python2.7,ubuntu怎么安装python2.7.6的版本,ubuntu怎么安装python2.7.6的版本。python Python 2.7.11+ (default, Apr 17 2016, 14:00:29) [GCC 5.3.1 20

资讯

python转换utf8

阅读(2)

本文主要为您介绍python转换utf8,内容包括python如何将字符串转化为utf8什么样子,python中unicode编码怎么转换为utf8,有个文件是python的,数据不知道是什么,有办法转成UTF8么搜狗问。实现代码如下:a = abce# print type(a)b = a.decode("asc

资讯

python替换字符串中的

阅读(2)

本文主要为您介绍python替换字符串中的,内容包括python中怎么替换字符串,python中如何替换字符串中的"\\"符号,Python如何替换字符串里的第N个字符。Python替换某个文本中的字符串,然后生成新的文本文档,代码如下:import osos.chdir(D:\\) #