当前位置:  开发笔记 > 编程语言 > 正文

使用Python进行屏幕抓取

如何解决《使用Python进行屏幕抓取》经验,为你挑选了2个好方法。

Python是否有提供JavaScript支持的屏幕抓取库?

我一直在使用pycurl来处理简单的HTML请求,而Java的HtmlUnit则用于需要JavaScript支持的更复杂的请求.

理想情况下,我希望能够完成Python的所有工作,但我没有遇到任何允许我这样做的库.它们存在吗?



1> hoju..:

处理静态HTML时有很多选项,其他响应包含这些选项.但是,如果您需要JavaScript支持并希望保留在Python中,我建议使用webkit来呈现网页(包括JavaScript),然后检查生成的HTML.例如:

import sys
import signal
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import QWebPage

class Render(QWebPage):
    def __init__(self, url):
        self.app = QApplication(sys.argv)
        QWebPage.__init__(self)
        self.html = None
        signal.signal(signal.SIGINT, signal.SIG_DFL)
        self.connect(self, SIGNAL('loadFinished(bool)'), self._finished_loading)
        self.mainFrame().load(QUrl(url))
        self.app.exec_()

    def _finished_loading(self, result):
        self.html = self.mainFrame().toHtml()
        self.app.quit()


if __name__ == '__main__':
    try:
        url = sys.argv[1]
    except IndexError:
        print 'Usage: %s url' % sys.argv[0]
    else:
        javascript_html = Render(url).html



2> Justin..:

美丽的汤仍然是你最好的选择.

如果您需要"JavaScript支持"来拦截Ajax请求,那么您也应该使用某种类型的捕获(例如YATT)来监视这些请求是什么,然后模拟/解析它们.

如果您需要"JavaScript支持"以便能够看到具有静态JavaScript的页面的最终结果是什么,那么我的第一选择是尝试根据具体情况弄清楚JavaScript正在做什么(例如,如果JavaScript基于某些Xml做某事,那么只需直接解析Xml)

如果你真的想要"JavaScript支持"(因为你想看看在页面上运行脚本后html是什么)那么我认为你可能需要创建一些浏览器控件的实例,然后阅读生成的html/dom一旦完成加载就从浏览器控件返回并用美丽的汤解析它.那将是我最后的手段.


虽然BeautifulSoup与来自服务器的"静态"HTML标记非常合作,但它会因单页样式的ajaxy web应用程序而失败,这些应用程序通过Javascript和XMLHttpRequests动态生成内容.它也会在依赖Javascript维护会话状态和导航的网站上失败,以防止网页抓取.
推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有