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
美丽的汤仍然是你最好的选择.
如果您需要"JavaScript支持"来拦截Ajax请求,那么您也应该使用某种类型的捕获(例如YATT)来监视这些请求是什么,然后模拟/解析它们.
如果您需要"JavaScript支持"以便能够看到具有静态JavaScript的页面的最终结果是什么,那么我的第一选择是尝试根据具体情况弄清楚JavaScript正在做什么(例如,如果JavaScript基于某些Xml做某事,那么只需直接解析Xml)
如果你真的想要"JavaScript支持"(因为你想看看在页面上运行脚本后html是什么)那么我认为你可能需要创建一些浏览器控件的实例,然后阅读生成的html/dom一旦完成加载就从浏览器控件返回并用美丽的汤解析它.那将是我最后的手段.