Mar*_*rco 14 python screen-scraping pycurl htmlunit
Python是否有提供JavaScript支持的屏幕抓取库?
我一直在使用pycurl来处理简单的HTML请求,而Java的HtmlUnit则用于需要JavaScript支持的更复杂的请求.
理想情况下,我希望能够完成Python的所有工作,但我没有遇到任何允许我这样做的库.它们存在吗?
hoj*_*oju 12
处理静态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
Run Code Online (Sandbox Code Playgroud)
Jus*_*tin 11
美丽的汤仍然是你最好的选择.
如果您需要"JavaScript支持"来拦截Ajax请求,那么您也应该使用某种类型的捕获(例如YATT)来监视这些请求是什么,然后模拟/解析它们.
如果您需要"JavaScript支持"以便能够看到具有静态JavaScript的页面的最终结果是什么,那么我的第一选择是尝试根据具体情况弄清楚JavaScript正在做什么(例如,如果JavaScript基于某些Xml做某事,那么只需直接解析Xml)
如果你真的想要"JavaScript支持"(因为你想看看在页面上运行脚本后html是什么)那么我认为你可能需要创建一些浏览器控件的实例,然后阅读生成的html/dom一旦完成加载就从浏览器控件返回并用美丽的汤解析它.那将是我最后的手段.