鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 编程语言开发 > python > >

利用PyQt抓取含有JavaScript执行结果的网页内容?

来源:互联网 作者:佚名 时间:2012-11-22 15:53
利用PyQt抓取含有JavaScript执行结果的网页内容?Posted on 在利用Python和BeautifulSoup抓取网页内容中谈到的方法在处理网页中含有JavaScript执行结果时会遇到问题,比如我想抓取去哪儿网上的机票搜索结果时,抓取到的结果是请稍等,您查询的结果正在实时搜

利用PyQt抓取含有JavaScript执行结果的网页内容? Posted on

      在“利用Python和BeautifulSoup抓取网页内容”中谈到的方法在处理网页中含有JavaScript执行结果时会遇到问题,比如我想抓取去哪儿网上的机票搜索结果时,抓取到的结果是“请稍等,您查询的结果正在实时搜索中”。这并不是我想要的结果。我在stackoverflow上提出了这个问题,得到的回复是利用Python中urllib模块无法解决这个问题,因为这个网页中调用了JavaScript函数去执行搜索并载入搜索结果。该回复给出的解决方法是PyQt或Selenium。因为我还是想利用Python解决该问题,所以尝试了一下PyQt。

      PyQt是一套为Nokia Qt应用框架开发的Python库,香港服务器,可以在Window,Mac OSX和Linux平台上运行。最新版本是PyQt v4.9.4。

      PyQt4在Mac OSX上的安装:以在Mac OSX 10.7.5上安装PyQt v4.9.4为例。

1. 下载并安装Qt。根据安装程序wizard一步一步执行下去就可以。

2. 下载并安装SIP。SIP是一个连接Python和C/C++的工具。解压SIP安装包并运行:

cd ~/Downloads/sip-4.13.3 python3 configure.py -d /Library/Python/3.2/site-packages --arch x86_64 make sudo make install

其中--arch x86_64指定了SIP安装平台的体系结构。

3. 下载并安装PyQt4 。解压安装包并执行:

cd PyQt-mac-gpl-4.9.4 python3 configure.py -q /Users/Sam/QtSDK/Desktop/Qt/4.8.1/gcc/bin/qmake -d /Library/Python/3.2/site-packages/ --use-arch x86_64 make sudo make install

这个安装过程可能会花一段时间。其中/Users/Sam/QtSDK是Qt的安装目录。

      利用QtWebKit抓取网页中JavaScript执行结果的尝试

      QtWebKit提供了一个Web浏览器引擎,香港服务器,可以解析含有CSS和JS的HTML。根据stackoverflow的回复,香港虚拟主机,我尝试利用QtWebKit中的QWebPage来解决我的问题,示例代码如下:

View Code

import sys import signal import urllib.parse from PyQt4.QtWebKit import QWebPage class Crawler( QWebPage ): def __init__(self, url, file): QWebPage.__init__( self ) self._url = url self._file = file def crawl( self ): signal.signal( signal.SIGINT, signal.SIG_DFL ) self.connect( self, SIGNAL( ), self._finished_loading ) self.mainFrame().load( QUrl( self._url ) ) def _finished_loading( self, result ): file = open( self._file, ) file.write( self.mainFrame().toHtml() ) file.close() sys.exit( 0 ) def main(): app = QApplication( sys.argv ) url = values = {:, :, :} encoded_param = urllib.parse.urlencode(values) full_url = url + + encoded_param filename = crawler = Crawler( full_url, filename ) crawler.crawl() sys.exit( app.exec_() ) : main()

 

      但是遗憾的是我得到的依然是“请稍等,您查询的结果正在实时搜索中”。也许某个地方处理错了,也许PyQt并不能解决我的问题,也许。问题还在探索中

上一篇:python生成回文数
下一篇:Python的作用域
网友评论
<