我正在尝试建立一个从维基页面流式传输的网站,并将内容下载到我的页面中。
在有人说欺骗网站是非法的之前,请注意,这是一个wiki网站,并且在该网站的每个页面下都有:
内容可在署名 - 非商业性使用 - 相同方式共享3.0 Unported。
下获得
含义我可以自由使用并重新提供给我的信息。
这是维基页面:http://wiki.mabinogiworld.com/
基本上我正在尝试建立一个网站来直接获取服务器在线状态表并将其放入我的网页,但同时我想保持更新,所以下次必须重新获取表格网页刷新。
有了这个,我遇到了跨域问题并找到了与YQL相关的东西似乎能够帮助我,但我仍然无法弄明白。
这是我到目前为止所做的:
YUI().use("yql", function (Y)
{
var query = 'SELECT * FROM html WHERE url="http://wiki.mabinogiworld.com/" and xpath="//div/table"';
Y.YQL(query, function(results)
{
var temp;
var size = 0;
temp = results.query.results.table;
size = temp.length;
for (var i = 0; i < size; i++)
{
//Loop through the result and find the exact table I want
}
}
}
使用上面的代码(循环太乱了,我把它剪掉了)我能够得到我想要的所有子列和行的确切表,但它返回的结构我不知道如何转换回HTML。
如何从wiki页面获取表格并将其放入我的网页?什么是变量类型的“结果”呢?我似乎无法以任何方式使用它而不是访问。
谢谢。
答案 0 :(得分:0)
首先,您的XPath查询过于宽泛。看一下wiki页面的来源,我想出了这个:
//div[@id='mw-content-text']/table//table[@class='center']
不幸的是,您想要的表上没有ID,因此选择具有center
类的表是我能做的最好的。这将返回5个不同的表;你想要第一个。我试图使用“第一个元素”谓词(table[@class='center'][1]
),但似乎没有做任何事情。请注意,<results>
元素中的XML是可以转储到页面中的直接XHTML。 (假设您要求结果为XML,而不是JSON)
我发现Yahoo's YQL Console真有帮助。它允许您在尝试将其与Javascript结合以解析结果之前对您的查询进行微调。
这不是最佳解决方案,但它避免了在Javascript中解析XML或将JSON转换为HTML的需要。您可以执行AJAX调用来获取HTML,然后删除除表之外的所有内容:
var scrapeUrl = 'www.example.com';
$.ajax({
type: "GET",
url: scrapeUrl,
success(html) {
var $scrapedElement = $(html).find("h1");
$("#scrapedDataDiv").html($scrapedElement);
},
error() {
alert("Problem getting table");
}
});
在此示例中,代码在www.example.com
下载页面并删除所有h1
标记,这要归功于jQuery的便捷选择器。然后将h1
代码放入ID为div
的{{1}}。
显然,您仍然需要处理XSS / Same Origin问题。您可以通过在服务器上设置代理来执行此操作。
答案 1 :(得分:0)
尝试执行此处发布的内容:YQL JSON script not returning?
基本上它可以在YQL的帮助下实现AJAX
好吧,如果你真的想要保持表格的格式和样式,制作你自己的表格,然后把自己的风格放到它上面,然后从YQL中提取信息并开始填充表格。这样就可以用你的方法完成。 YQL非常有用,我开始玩它并发现它非常强大。
不确定这是否会违反版权规则,因为您确实在重复使用自己格式的数据。