Python 是否有提供 JavaScript 支持的屏幕抓取库?
我一直在使用pycurl处理简单的 HTML 请求,使用 Java 的HtmlUnit处理需要 JavaScript 支持的更复杂的请求。
理想情况下,我希望能够用 Python 做所有事情,但我还没有遇到任何允许我这样做的库。它们存在吗?
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 完成加载后从浏览器控件返回,并用漂亮的汤正常解析它。然而,那将是我最后的手段。
Scrapy 是一个快速的高级屏幕抓取和网络抓取框架,用于抓取网站并从其页面中提取结构化数据。它可用于广泛的用途,从数据挖掘到监控和自动化测试。
硒可能吗?它允许您使用 python(以及其他语言)自动化实际的浏览器(Firefox、IE、Safari)。它用于测试网站,但似乎也可以用于抓取。(免责声明:我自己从未使用过)
Webscraping库将 PyQt4 WebView包装成一个简单易用的 API。
这是一个下载 WebKit 呈现的网页并使用 XPath 提取标题元素的简单示例(取自上面的 URL):
from webscraping import download, xpath
D = download.Download()
# download and cache the Google Code webpage
html = D.get('http://code.google.com/p/webscraping')
# use xpath to extract the project title
print xpath.get(html, '//div[@id="pname"]/a/span')
你可以试试蜘蛛猴吗?
这个 Python 模块允许执行 Javascript 吗?Python 中的类、对象和函数,以及 Javascript 脚本和函数的评估和调用。它大量借鉴了 Claes Jacobssen 的 Javascript Perl 模块,而后者又基于 Mozilla 的 PerlConnect Perl 绑定。
我还没有找到任何东西。我使用了beautifulsoup和自定义例程的组合......