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
print javascript_html
会返回错误信息UnicodeEncodeError: 'ascii' codec can't encode character u'\u2026' in position 4200: ordinal not in range(128)
。请帮忙解决! :) - significanceBeautifulSoup仍然是您最好的选择。
如果您需要“JavaScript支持”以拦截Ajax请求,则应使用某种捕获工具(例如YATT)来监视这些请求,然后模拟/解析它们。
如果您需要“JavaScript支持”以便能够查看具有静态JavaScript的页面的最终结果,那么我的首选是逐个案例地尝试弄清楚JavaScript正在做什么(例如,如果JavaScript基于某些Xml执行某些操作,则直接解析Xml而不是JavaScript)。
如果您真的需要“JavaScript支持”(即您想要查看在页面上运行脚本后的html),那么我认为您可能需要创建某个浏览器控件的实例,然后在浏览器控件完成加载后从中读取生成的html / dom,并使用beautifulsoup正常解析。但这将是我的最后一步尝试。
Selenium也许是一个不错的选择?它允许你使用Python(以及其他语言)自动化实际浏览器(Firefox,IE,Safari)。它主要用于测试网站,但似乎也可以用于网页抓取。(免责声明:我自己从未使用过它)
Webscraping库将PyQt4 WebView封装成一个简单易用的API。
这里有一个简单的示例,使用XPath下载由WebKit渲染的网页并提取其中的标题元素(取自上述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')
你可以尝试使用spidermonkey吗?
这个Python模块允许在Python中实现JavaScript类、对象和函数,以及评估和调用JavaScript脚本和函数。它很大程度上借鉴了Claes Jacobssen的JavaScript Perl模块,而Claes Jacobssen的JavaScript Perl模块则基于Mozilla的PerlConnect Perl绑定。
我还没有找到相关的内容。我使用beautifulsoup和自定义程序的组合...