如何在其他人的网页上对结果进行排序?

时间:2017-01-13 04:15:40

标签: html sorting web-crawler

我想在其他人的网页上对结果列表进行排序。

在此网页上,每个结果项目都以其受欢迎程度显示。我想根据他们的受欢迎程度对结果进行排序。

不幸的是,这个网页既没有为其用户提供排序选项,也没有提供API。

我正在考虑抓取所有网页,在HTML代码中搜索普及率,然后对其进行排序。

你有什么建议?什么是最好的策略?

1 个答案:

答案 0 :(得分:0)

如果结果列表以表格形式显示,如果热门程序是一个列,您将使用浏览器,那么您可以使用Jesse Ruderman的sort table bookmarklet。它会在每列的顶部添加一个额外的列(“a / d”),您可以使用它来按升序或降序对其进行排序。

您只需将其拖放到书签工具栏或使用相应的JavaScript代码创建书签(确保没有空格):

javascript:function%20toArray%20(c){var%20a,%20k;a=new%20Array;for%20(k=0;%20k<c.length;%20++k)a[k]=c[k];return%20a;}function%20insAtTop(par,child){if(par.childNodes.length)%20par.insertBefore(child,%20par.childNodes[0]);else%20par.appendChild(child);}function%20countCols(tab){var%20nCols,%20i;nCols=0;for(i=0;i<tab.rows.length;++i)if(tab.rows[i].cells.length>nCols)nCols=tab.rows[i].cells.length;return%20nCols;}function%20makeHeaderLink(tableNo,%20colNo,%20ord){var%20link;link=document.createElement('a');link.href='javascript:sortTable('+tableNo+','+colNo+','+ord+');';link.appendChild(document.createTextNode((ord>0)?'a':'d'));return%20link;}function%20makeHeader(tableNo,nCols){var%20header,%20headerCell,%20i;header=document.createElement('tr');for(i=0;i<nCols;++i){headerCell=document.createElement('td');headerCell.appendChild(makeHeaderLink(tableNo,i,1));headerCell.appendChild(document.createTextNode('/'));headerCell.appendChild(makeHeaderLink(tableNo,i,-1));header.appendChild(headerCell);}return%20header;}g_tables=toArray(document.getElementsByTagName('table'));if(!g_tables.length)%20alert("This%20page%20doesn't%20contain%20any%20tables.");(function(){var%20j,%20thead;for(j=0;j<g_tables.length;++j){thead=g_tables[j].createTHead();insAtTop(thead,%20makeHeader(j,countCols(g_tables[j])))}})%20();function%20compareRows(a,b){if(a.sortKey==b.sortKey)return%200;return%20(a.sortKey%20<%20b.sortKey)%20?%20g_order%20:%20-g_order;}function%20sortTable(tableNo,%20colNo,%20ord){var%20table,%20rows,%20nR,%20bs,%20i,%20j,%20temp;g_order=ord;g_colNo=colNo;table=g_tables[tableNo];rows=new%20Array();nR=0;bs=table.tBodies;for(i=0;%20i<bs.length;%20++i)for(j=0;%20j<bs[i].rows.length;%20++j){rows[nR]=bs[i].rows[j];temp=rows[nR].cells[g_colNo];if(temp)%20rows[nR].sortKey=temp.innerHTML;else%20rows[nR].sortKey="";++nR;}rows.sort(compareRows);for%20(i=0;%20i%20<%20rows.length;%20++i)insAtTop(table.tBodies[0],%20rows[i]);}

如果您对代码的作用感兴趣,可以使用在线JavaScript美化器来美化它。这就是你得到的:

javascript: function toArray(c) {
    var a, k;
    a = new Array;
    for (k = 0; k < c.length; ++k) a[k] = c[k];
    return a;
}

function insAtTop(par, child) {
    if (par.childNodes.length) par.insertBefore(child, par.childNodes[0]);
    else par.appendChild(child);
}

function countCols(tab) {
    var nCols, i;
    nCols = 0;
    for (i = 0; i < tab.rows.length; ++i)
        if (tab.rows[i].cells.length > nCols) nCols = tab.rows[i].cells.length;
    return nCols;
}

function makeHeaderLink(tableNo, colNo, ord) {
    var link;
    link = document.createElement('a');
    link.href = 'javascript:sortTable(' + tableNo + ',' + colNo + ',' + ord + ');';
    link.appendChild(document.createTextNode((ord > 0) ? 'a' : 'd'));
    return link;
}

function makeHeader(tableNo, nCols) {
    var header, headerCell, i;
    header = document.createElement('tr');
    for (i = 0; i < nCols; ++i) {
        headerCell = document.createElement('td');
        headerCell.appendChild(makeHeaderLink(tableNo, i, 1));
        headerCell.appendChild(document.createTextNode('/'));
        headerCell.appendChild(makeHeaderLink(tableNo, i, -1));
        header.appendChild(headerCell);
    }
    return header;
}
g_tables = toArray(document.getElementsByTagName('table'));
if (!g_tables.length) alert("This page doesn't contain any tables.");
(function() {
    var j, thead;
    for (j = 0; j < g_tables.length; ++j) {
        thead = g_tables[j].createTHead();
        insAtTop(thead, makeHeader(j, countCols(g_tables[j])))
    }
})();

function compareRows(a, b) {
    if (a.sortKey == b.sortKey) return 0;
    return (a.sortKey < b.sortKey) ? g_order : -g_order;
}

function sortTable(tableNo, colNo, ord) {
    var table, rows, nR, bs, i, j, temp;
    g_order = ord;
    g_colNo = colNo;
    table = g_tables[tableNo];
    rows = new Array();
    nR = 0;
    bs = table.tBodies;
    for (i = 0; i < bs.length; ++i)
        for (j = 0; j < bs[i].rows.length; ++j) {
            rows[nR] = bs[i].rows[j];
            temp = rows[nR].cells[g_colNo];
            if (temp) rows[nR].sortKey = temp.innerHTML;
            else rows[nR].sortKey = "";
            ++nR;
        }
    rows.sort(compareRows);
    for (i = 0; i < rows.length; ++i) insAtTop(table.tBodies[0], rows[i]);
}