在 Appcelerator Titanium 中解析写得不好的 HTML

Parsing badly written HTML in Appcelerator Titanium

提问人:jbssm 提问时间:3/28/2013 最后编辑:Communityjbssm 更新时间:10/7/2013 访问量:920

问:

我正在尝试从 Titanium 中的一小段 HTML 中获取一些值。 我尝试使用这个库:https://gist.github.com/bob-sims/4406293 另一个问题(Titanium Mobile 的 HTML 解析器)中回答的,但我就是无法从中得到任何东西。事实上,它根本没有文档,而且我是 Titanium 的新手,这可能无济于事。

html来自这个页面: http://www.ctt.pt/feapl_2/app/open/objectSearch/cttObjectSearch.jspx?showResults=true&lang=01&pesqObjecto.objectoId=RD057055721PT,我试图在下面获取值: 这是我写的代码:<tr id="object_RD057055721PT" class="object"><tr id="details_0" class="detailsDiv detailsHide">

var select = require('lib/soupselect').select, htmlparser = require('lib/htmlparser');

var handler = new htmlparser.DefaultHandler(function(err, dom) {
    if (err) {
        alert('Error: ' + err);
    } else {
        Ti.API.info("dom" + dom);
        var body = select(dom, 'meta[property="og:object_RD057055721PT"]');
        rows.forEach(function(body) {
            Ti.API.info(body.children[0].data)
        });

        var rows = select(dom, 'div.row');
        Ti.API.info("rows: " + rows)

        rows.forEach(function(row) {
            Ti.API.info(row.children[0].data)
        });
    }
});

function renderXML() {
    var httpResponse = this.responseText;

    var parser = new htmlparser.Parser(handler);
    parser.parseComplete(httpResponse);
};

var xhr = Ti.Network.createHTTPClient({
    onload : renderXML,
    onerror : errorMessage,
})

xhr.open("GET", "http://www.ctt.pt/feapl_2/app/open/objectSearch/cttObjectSearch.jspx?showResults=true&lang=01&pesqObjecto.objectoId=RD057055721PT");
xhr.send();

但我从中得到的所有输出是:

dom[object 对象],[object 对象],[object 对象],[object Object],[object 对象]

JavaScript HTML 解析

评论

0赞 Josiah Hester 3/28/2013
您取回了对象,因此请尝试调试以查看行中的实际内容。或者,尝试以下操作:查看对象内部的内容。Ti.API.info(JSON.stringify(row.children[0].data));
0赞 jbssm 3/29/2013
@JosiahHester 我尝试过,在 ' rows.forEach(function(row) {' 和 Ti.API.info(JSON.stringify(dom.children[0].data)); 在邮件循环下,但什么也没出来。Ti.API.info(JSON.stringify(row.children[0].data));else
0赞 Josiah Hester 3/29/2013
为什么不在这些行处设置断点,然后使用调试器查看发生了什么。
0赞 jbssm 3/29/2013
@JosiahHester我做到了。问题是,dom 对象确实将所有页面都分散在其中的许多数据结构中,但是我所做的查询,例如您建议的查询或我放入原始问题代码中的查询,都是空的。就像我说的,我认为这是一个问题,因为我不知道如何准确获取我想要的数据,而不是解析器的数据。但是由于解析器根本没有附带任何文档,因此我一无所知。
1赞 Josiah Hester 3/29/2013
或者,您可以将它们加载到 Webview 组件中,然后插入 jQuery,并使用它来获取 DOM 组件。

答:

0赞 daniula 10/7/2013 #1

尝试使用 YQL,它将更好地解析未知的 HTML,并返回良好的 JSON 响应。

评论

0赞 dlopezgonzalez 6/20/2014
是的,但有些网站阻止了 yql 服务,例如那些不允许机器人索引的网站。