Facebook刮刀不加载动态元标记

时间:2013-02-15 16:08:41

标签: html facebook web-scraping meta-tags scraper

我正在使用下面的函数(GWT)动态创建HTML元标记。在DOM上花费1秒钟。除Facebook外,它工作正常。当我从我的网络共享链接时,刮刀获取HTML中的元标记:无。我该如何解决这个问题?

/**
* Include the HTML attributes: title, description and keywords (meta tags)
*/
private void createHTMLheader(MyClass thing) {

    String title=thing.getTitle();
    String description=thing.getDescription();

    Document.get().setTitle(title);

    MetaElement metaDesc = Document.get().createMetaElement();
    metaDesc.setName("description");
    metaDesc.setContent(description);
    NodeList<Element> nodes = Document.get().getElementsByTagName("head");
    nodes.getItem(0).appendChild(metaDesc);
}

这是DOM上的结果HEAD。标题 aaaa 和元描述已动态加载。 (感谢CBroe提示)。在“查看源”功能中,不显示这些动态标记(仅在开发人员工具上 - 查看dom)。

<head>
    <title>aaaa</title>
    <meta content="text/html; charset=utf-8" http-equiv="content-type">
    <meta name="description" content="My description">

    <script language="javascript" type="text/javascript" src="dialective/dialective.nocache.js"></script><script defer="defer">dialective.onInjectionDone('dialective')</script>

</head>

原始HTML没有TITLE或META-DESCRIPTION标记。

2 个答案:

答案 0 :(得分:13)

Facebook刮刀只能看到来自服务器的原始HTML响应中包含的<meta>标签。运行任何JavaScript代码,Flash插件,Java小程序或其他任何可能运行的成熟浏览器都不够“足够聪明”。

您需要使用服务器端框架在服务器上生成这些<meta>标记。

此外,Facebook提供了一个方便的testing tool,以确保您的页面公开适当的元标记。您可能还需要添加OpenGraph标记,例如og:titleog:description

答案 1 :(得分:-1)

  

出于某种原因,元描述尚未加载上述函数...

那是因为你只是创建一个新的MetaElement - 但你 什么都没有。

您必须追加到文档中,更具体地针对其head元素。

这样的东西
getHead().appendChild(metaDesc)

缺失。