python - 使用 Python 进行屏幕抓取

标签 python screen-scraping htmlunit pycurl

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

我一直在使用 pycurl 处理简单的 HTML 请求,并使用 Java 的 HtmlUnit 处理需要 JavaScript 支持的更复杂的请求。

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

最佳答案

在处理静态 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

关于python - 使用 Python 进行屏幕抓取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2190502/

相关文章:

python - 从列表中删除第一个遇到的元素

python - 向 xrange() 添加任意元素?

python - 有没有比 urlgrabber 更好的库来在 python 中获取远程 url?

ios - Swift:如何在屏幕边框上制作标签?

java - 极其简单的代码在 HtmlUnit 中不起作用

python - 将 sql 查询初始化为数据类

python - 为什么我不能在 Python 中读取超过 16 个字节的 JPEG 文件?

python - 如何修复某些 URL 的 Newspaper3k 403 客户端错误?

java - HtmlUnit 为 Ajax 应用程序拍摄快照

javascript - 下载 JavaScript 返回的图像 (html2canvas)