Captura simples de canvas usando jQuery

Eu tenho jogado com a idéia de usar um simples screen-scraper usando jQuery e eu estou querendo saber se o seguinte é possível.

Eu tenho uma página HTML simples e estou fazendo uma tentativa (se é que isso é possível) para pegar o conteúdo de todos os itens da lista de outra página, da seguinte forma:

Página principal:

  $(document).ready(function(){ $.getJSON("[URL to other page]", function(data){ //Iterate through the 
  • inside of the URL's data $.each(data.items, function(item){ $("
  • ").value().appendTo("#data"); }); }); });
  • Outra página:

     //Html  

    Items to Scrape

    • I want to scrape what is here
    • and what is here
    • and here as well
    • and append it in the main page

    Então, é possível usar o jQuery para puxar todo o conteúdo do item da lista de uma página externa e anexá-los dentro de uma div?

    Use $.ajax para carregar a outra página em uma variável, crie um elemento temporário e use .html() para definir o conteúdo para o valor retornado. Faça um loop pelos filhos do elemento nodeType 1 e mantenha os valores de nó dos primeiros filhos. Se a página externa não estiver em seu servidor da Web, você precisará fazer proxy do arquivo com seu próprio servidor da Web.

    Algo assim:

     $.ajax({ url: "/thePageToScrape.html", dataType: 'text', success: function(data) { var elements = $("
    ").html(data)[0].getElementsByTagName("ul")[0].getElementsByTagName("li"); for(var i = 0; i < elements.length; i++) { var theText = elements[i].firstChild.nodeValue; // Do something here } } });
     $.get("/path/to/other/page",function(data){ $('#data').append($('li',data)); } 

    Se isso é para o mesmo domínio, então não há problema – a solução da jQuery é boa.

    Caso contrário, você não poderá acessar o conteúdo de um site arbitrário, porque isso é considerado um risco de segurança. Veja a mesma política de origem .

    Há, naturalmente, soluções alternativas do lado do servidor, como um proxy da Web ou headers CORS . Se você tiver sorte, eles vão apoiar jsonp.

    Mas se você quer uma solução do lado do cliente para trabalhar com um site arbitrário e navegador da web, então você está sem sorte. Existe uma proposta para relaxar esta política , mas isso não afetará os navegadores atuais.

    Você pode querer considerar o pjscrape:

    http://nrabinowitz.github.io/pjscrape/

    Ele permite que você faça isso a partir da linha de comando, usando javascript e jQuery. Ele faz isso usando o PhantomJS, que é um navegador webkit sem header (não tem janela e existe apenas para o uso do seu script, para que você possa carregar sites complexos que usam AJAX e funcionará exatamente como se fosse um navegador real) .

    Os exemplos são auto-explicativos e acredito que isso funciona em todas as plataformas (incluindo o Windows).

    Raspagem simples com jQuery …

     // Get HTML from page $.get( 'http://example.com/', function( html ) { // Loop through elements you want to scrape content from $(html).find("ul").find("li").each( function(){ var text = $(this).text(); // Do something with content } ) } ); 

    Use canais YQL ou Yahoo para fazer a solicitação de domínio cruzado para o conteúdo HTML da página bruta. O yahoo pipe ou a consulta YQL cuspirá isso de volta como um JSON que pode ser processado pelo jquery para extrair e exibir os dados necessários.

    No lado negativo: os canais YQL e Yahoo OBEDECEM o arquivo robots.txt para o domínio de destino e, se a página for longa, os comandos regex do Yahoo Pipes não serão executados.

    Tenho certeza de que você vai acertar o problema do CORS com solicitações em muitos casos. A partir daqui, tente resolver o problema de CORS.

     var name = "kk"; var url = "http://anyorigin.com/go?url=" + encodeURIComponent("https://www.yoursite.xyz/") + name + "&callback=?"; $.get(url, function(response) { console.log(response); });