0

我正在尝试使用 YQL 从网页中检索 HTML,但遇到了一些麻烦。

大图:我正在尝试编写一个应用程序,以 GET 请求的形式将搜索条件发送到站点,然后从响应中提取结果数。该站点是http://nl.newsbank.com,可用于搜索美国新闻文章。搜索过程相当简单:您可以在此处发送一个类似这样的 GET 请求,该请求运行对包含关键字“pizza”的所有文章的搜索(您可以查看链接以了解查询的结构)。我的应用程序发送此请求,然后提取结果数,如“结果:1 - n of n ”标签所示。

这在纸面上很简单,并且很容易在服务器端实现。然而,因为这不是一个“真正的”API,我必须加载整个页面来获取我关心的非常小的数据,它比我更喜欢的带宽密集,以及其他令人讨厌的方面做这个服务器端。

我正在尝试按照此答案中的建议使用 YQL 在客户端实现类似的功能。问题是,虽然提供的示例:

http://jsfiddle.net/BKJWu/

var query = 'SELECT * FROM html WHERE url="http://mattgemmell.com/2008/12/08/what-have-you-tried/" and xpath="//h1" and class="entry-title"';
var url = "http://query.yahooapis.com/v1/public/yql?q=" + query + "&format=json&callback=??";


$.getJSON(url,function(data){
    alert(data.query.results.h1.content);
})

完全按照我期望的方式工作,我无法为http://nl.newsbank.com搜索做同样的事情。我以上述方式使用 xpaths 时遇到了一些麻烦。

有两种情况:当我尝试运行GET 请求时,如您所见,该请求在浏览器中加载良好,data无论我输入什么 xpath,我都会收到以下错误:`Query syntax error(s) [line 1:89不匹配的字符 ' ' 期待 '"']

或者,当我尝试从http://nl.newsbank.com检索 html 时,我会从 YQL 获得空 HTML。

我没有得到空 HTML 当使用其他类型的访问(例如服务器端使用 HTMLAgilityPack 或只是浏览器)时,您可以看到如果您尝试 jsfiddle 中的示例,它适用于其他网站,所以我我完全不明白为什么这对这个特定的网站不合作。

非常欢迎任何帮助。

编辑:一个失败的 YQL 查询构造示例是:

var xpath = "//span[@class='basic-text-white']";
var query = 'SELECT * FROM html WHERE url="http://nl.newsbank.com/nl-search/we/Archives/?s_siteloc=NL2&p_queryname=4000&p_action=search&p_product=NewsLibrary&p_theme=newslibrary2&s_search_type=customized&d_sources=location&d_place=United%20States&p_nbid=&p_field_psudo-sort-0=psudo-sort&f_multi=&p_multi=&p_widesearch=smart&p_sort=YMD_date%3aD&p_maxdocs=200&p_perpage=10&p_text_base-0=SEARCHTERM&p_field_base-0=&p_bool_base-1=AND&p_text_base-1=&p_field_base-1=Section&p_bool_base-2=AND&p_text_base-2=&p_field_base-2=&p_text_YMD_date-0=April_1_2001_to_April_1_2012&p_field_YMD_date-0=YMD_date&p_params_YMD_date-0=date%3aB,E&p_field_YMD_date-3=YMD_date&p_params_YMD_date-3=date%3aB,E&Search.x=18&Search.y=18" and xpath="'+xpath+'"';
var url = "http://query.yahooapis.com/v1/public/yql?q=" + query + "&format=json&callback=??";
4

0 回答 0