2017-01-13 1 views
-1

다른 사람의 웹 페이지에서 결과 목록을 정렬하고 싶습니다.다른 사람의 웹 페이지에서 어떻게 결과를 정렬 할 수 있습니까?

이 웹 페이지에서는 각 결과 항목이 인기도로 표시됩니다. 그들의 인기도에 따라 결과를 정렬하고 싶습니다.

불행히도이 웹 페이지는 사용자 또는 API에 대한 정렬 옵션을 제공하지 않습니다.

나는 모든 페이지를 크롤링하여 HTML 코드에서 인기도를 검색 한 다음 정렬하는 것을 고려하고있었습니다.

당신은 무엇을 제안합니까? 가장 좋은 전략은 무엇입니까?

+0

지금까지 시도한 방법은 무엇입니까? 단순히 의견을 청하기보다는 개선 할 수있는 지시 된 코드를 보여줄 수 있습니까? 의견 질문은 스택 오버플로에서 주제와 관련이 없습니다. –

+0

지금까지 아무 것도 없습니다. 코딩하기 전에 좋은 이론적 인 솔루션을 먼저 요청하는 것이 더 좋을 것이라고 생각했습니다. – lioli

+0

PhantomJS를 사용해보십시오. http://phantomjs.org –

답변

0

결과 목록이 테이블로 표시되는 경우 인기도가 열이고 브라우저를 사용하는 경우 Jesse Ruderman의 sort table bookmarklet을 사용할 수 있습니다. 오름차순 또는 내림차순으로 정렬 할 때 사용할 수있는 각 열의 맨 위에 추가 열 ("a/d")을 추가합니다.

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: 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]); 
} 
관련 문제