【发布时间】:2017-03-19 07:46:57
【问题描述】:
我正在尝试从以下链接中抓取以下 svg:
https://finance.yahoo.com/quote/AAPL/analysts?p=AAPL
我要抓取的部分如下:
我不需要图表的文字(只需要图表本身)。但是,我以前从未刮过 svg 图像,我不确定这是否可能。我环顾四周,但找不到任何有用的 python 包来直接执行此操作。
我知道我可以使用 selenium 使用 python 截取图像,然后使用 PIL 对其进行裁剪并将其保存为 svg,但我想知道是否有更直接的方法可以从页面上抓取这些图表.任何有用的包或实现都会有所帮助。谢谢你。
编辑:得到了一些反对票,但不知道为什么这是我将如何以我的方式实现它..
import sys
import time
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
class Screenshot(QWebView):
def __init__(self):
self.app = QApplication(sys.argv)
QWebView.__init__(self)
self._loaded = False
self.loadFinished.connect(self._loadFinished)
def capture(self, url, output_file):
self.load(QUrl(url))
self.wait_load()
# set to webpage size
frame = self.page().mainFrame()
self.page().setViewportSize(frame.contentsSize())
# render image
image = QImage(self.page().viewportSize(), QImage.Format_ARGB32)
painter = QPainter(image)
frame.render(painter)
painter.end()
print 'saving', output_file
image.save(output_file)
def wait_load(self, delay=0):
# process app events until page loaded
while not self._loaded:
self.app.processEvents()
time.sleep(delay)
self._loaded = False
def _loadFinished(self, result):
self._loaded = True
s = Screenshot()
s.capture('https://finance.yahoo.com/quote/AAPL/analysts?p=AAPL', 'yhf.png')
然后我会使用 PIL 中的裁剪功能将图像从图表中取出。
【问题讨论】:
-
所以您只需要获取该 svg 文件并将其转换为 png?
-
您的问题是这些 SVG 是由 Javascript 生成的。任何解决方案不仅涉及加载 HTML,还涉及在从 DOM 中提取内联 SVG 之前执行页面上的所有 JS。一个简单的 HTML 抓取工具无法满足您的需求。
标签: python svg web-scraping yahoo-finance