4

有没有办法只在另一个 HTML 页面中嵌入网站的一部分?

示例:我看到一个我想写博客的答案,所以我抓取了 HTML 内容,并将其放在某个地方,并仅显示它,其样式就像它在 stackoverflow 上一样。基本上,如果有意义的话,我想用原始样式引用页面的部分。这是网站本身必须提供的东西,还是我可以使用 iframe 并告诉它只显示某个元素或某些疯狂的东西?对所有选项开放,但我希望它显示为 HTML,而不是图像(这确实是最后的手段)。

如果这是可能的,我是否需要注意安全问题?

4

5 回答 5

7

不要认为图像真的应该是最后的手段。您无法控制源页面的 HTML/CSS,因此即使您设计了一个解决方案(可能通过使用 JavaScript 解析出所需的代码段),也不能保证明天该站点不会决定更改其布局。

即使是控制 stackoverflow.com 布局的 Jeff,仍然更喜欢截屏网站,而不是实时拉取内容。

现在,如果您的目标是让内容自动更新,那就另当别论了。但是,除非您使用一些商定的共享内容的方法,例如 RSS,否则您的解决方案将非常脆弱。

于 2009-06-15T21:05:58.483 回答
2

您所描述的概念大致是所谓的“紫色包含”或“嵌入”。那里有一个图书馆,但它并没有完全积极地开发。这是一些关于它的ajaxian 文章

于 2009-06-15T21:36:38.877 回答
1

我建议使用 Python 的服务器端解决方案;使用 urllib2 请求页面,然后使用BeautifulSoup解析出您需要的位。BeautifulSoup 有一个非常灵活的选择 api,您可以使用它为您感兴趣的部分制作启发式方法。

为了显示:

soup = BeautifulSoup(html)
text = soup.find(text="Some text on the page that is unlikely to change")
print soup.parent.prettify()

这样,如果网站管理员后来更改了页面上的标记,您的抓取脚本应该仍然有效。

于 2009-06-15T21:28:54.980 回答
1

在客户端<iframe>是唯一实用的选择。可以滚动它,但从长远来看它可能不起作用,因为它在技术上接近点击劫持攻击。

还有跨站点 XHR,但需要从目标站点选择加入,并且目前仅适用于少数最新的浏览器。

在服务器端获取 HTML 很容易(每个像样的 Web 框架都具有下载页面和解析 HTML 的能力,并且您可以使用 XPath/XSLT 或 DOM 来提取您想要的位)。

然而,获取样式会很棘手——CSS 规则可能不适用于脱离上下文的 HTML 片段。您必须解析 CSS、提取和转换规则或使用浏览器并读取currentStyle每个节点。

显然,您必须对提取的 HTML 进行大量过滤以避免 XSS。这比看起来更难。

如果您不需要自动执行此操作,一个好的 HTML+CSS WYSIWYG 编辑器可能能够提取带有样式的内容片段。

于 2009-06-16T12:36:05.017 回答
0

这听起来像是 IE8 的 Web Slices 非常适合的东西。但是,它仅在 IE8 中可用,并且必须实施原始站点才能使您能够利用它。

于 2009-06-15T20:53:35.297 回答