Pergunta

Gostaria de obter dados de diferentes páginas da web, como endereços de restaurantes ou datas de eventos diferentes para um determinado local e assim por diante.Qual é a melhor biblioteca que posso usar para extrair esses dados de um determinado conjunto de sites?

Foi útil?

Solução

Se estiver usando python, dê uma boa olhada em Beautiful Soup (http://crummy.com/software/BeautifulSoup).

Uma biblioteca extremamente capaz torna a tarefa muito fácil.

Outras dicas

O HTML Agility Pack para programadores .net é incrível.Ele transforma páginas da web em documentos XML que podem ser consultados com XPath.

HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a@href")
{
HtmlAttribute att = link"href";
att.Value = FixLink(att);
}
doc.Save("file.htm");

Você pode encontrá-lo aqui. http://www.codeplex.com/htmlagilitypack

Acho que a resposta geral aqui é usar qualquer idioma + biblioteca http + analisador html/xpath.Acho que usar Ruby + hpricot oferece uma solução limpa e agradável:

require 'rubygems'
require 'hpricot'
require 'open-uri'

sites = %w(http://www.google.com http://www.stackoverflow.com)

sites.each do |site|
  doc = Hpricot(open(site))

  # iterate over each div in the document (or use xpath to grab whatever you want)
  (doc/"div").each do |div|
    # do something with divs here
  end
end

Para mais informações sobre Hpricot, consulte http://code.whytheluckystiff.net/hpricot/

Eu pessoalmente gosto do WWW::Mecanizar Módulo Perl para esses tipos de tarefas.Ele fornece um objeto modelado a partir de um navegador da Web típico (ou seja,você pode seguir links, preencher formulários ou usar o "botão Voltar" chamando métodos nele).

Para a extração do conteúdo real, você pode conectá-lo a HTML::TreeBuilder para transformar o site que você está visitando atualmente em uma árvore de HTML::Elemento objetos e extraia os dados desejados (o look_down() método de HTML::Element é especialmente útil).

acho que watir ou selênio são as melhores escolhas.A maioria das outras bibliotecas mencionadas são, na verdade, analisadores de HTML, e não é isso que você deseja...Você está se esforçando, se o dono do site quisesse que você acessasse os dados dele, ele colocaria um despejo de seu banco de dados ou site em um torrent e evitaria todas as solicitações http e tráfego caro.

basicamente, você precisa analisar HTML, mas o mais importante é automatizar um navegador.Isso a ponto de poder mover o mouse e clicar, basicamente imitando um usuário.Você precisa usar um programa de captura de tela para chegar aos captchas e enviá-los para decaptcha.com (que os resolve por uma fração de centavo) para contornar isso.esqueça de salvar o arquivo captcha analisando o html sem renderizá-lo em um navegador 'como deveria ser visto'.Você está fazendo screenscraping, não httprequestscraping.

watir fez o truque para mim em combinação com autoitx (para mover o mouse e inserir teclas nos campos -> às vezes isso é necessário para definir os eventos javascript corretos) e um utilitário simples de captura de tela para o captcha.desta forma você terá mais sucesso, é inútil escrever um ótimo analisador de HTML para descobrir que o dono do site transformou parte do texto em gráficos.(Problemático?não, basta obter uma biblioteca de OCR e alimentar o jpeg, o texto será retornado).Além disso, raramente os vi ir tão longe, embora em sites chineses haja muito texto em gráficos.

O Xpath salvou meu dia o tempo todo, é uma ótima linguagem específica de domínio (IMHO, posso estar errado) e você pode acessar qualquer tag na página, embora às vezes seja necessário ajustá-la.

O que senti falta foram os 'modelos reversos' (a estrutura do robô do Selenium tem isso).Perl tinha isso no módulo CPAN Template::Extract, muito útil.

A análise do html, ou a criação do DOM, eu deixaria para o navegador, sim, não será tão rápido, mas funcionará o tempo todo.

Além disso, bibliotecas que fingem ser Useragents são inúteis, os sites estão protegidos contra scraping hoje em dia, e a renderização do site em uma tela real muitas vezes é necessária para ir além dos captcha's, mas também de eventos javascript que precisam ser acionados para que as informações apareçam etc. .

Watir se você gosta de Ruby, Selenium para o resto, eu diria.O 'Human Emulator' (ou Web Emulator na Rússia) é realmente feito para esse tipo de raspagem, mas, novamente, é um produto russo de uma empresa que não esconde suas intenções.

também acho que uma semana dessas Wiley lançará um novo livro sobre scraping, que deve ser interessante.Boa sorte...

Eu pessoalmente acho http://github.com/shuber/curl/tree/master e http://simplehtmldom.sourceforge.net/ incrível para uso em meus projetos de spidering/scraping PHP.

O Perl WWW::Mecanizar biblioteca é excelente para fazer o trabalho burro de interagir com um site para chegar à página real que você precisa.

Eu usaria LWP (Libwww para Perl).Aqui está um bom pequeno guia: http://www.perl.com/pub/a/2002/08/20/perlandlwp.html

WWW::Scraper tem documentos aqui: http://cpan.uwinnipeg.ca/htdocs/Scraper/WWW/Scraper.htmlPode ser útil como base, você provavelmente desejaria criar seu próprio módulo que atenda às necessidades de mineração do seu restaurante.

O LWP forneceria um rastreador básico para você desenvolver.

Houve uma série de respostas recomendando Perl Mechanize, mas acho que Ruby Mechanize (muito semelhante à versão do Perl) é ainda melhor.Ele lida com algumas coisas como formulários de uma maneira muito mais limpa sintaticamente.Além disso, existem alguns frontends que rodam em cima do Ruby Mechanize que torna as coisas ainda mais fáceis.

Qual idioma você deseja usar?

curl com awk pode ser tudo que você precisa.

Você pode usar limpo para convertê-lo para XHTML e, em seguida, usar quaisquer recursos de processamento XML disponíveis na linguagem de sua escolha.

eu recomendaria LindaSopa.Não é o mais rápido, mas tem um desempenho muito bom em relação ao mau formato das páginas (X)HTML que a maioria dos analisadores engasga.

o que alguém disse.

use QUALQUER IDIOMA.

contanto que você tenha uma boa biblioteca de analisador e uma biblioteca http, você está pronto.

o material da árvore é mais lento, basta usar uma boa biblioteca de análise.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top