Estou pensando em experimentar o Beautiful Soup , um pacote Python para raspagem de HTML. Existem outros pacotes de raspagem de HTML que eu deveria estar olhando? Python não é um requisito, estou realmente interessado em ouvir sobre outras linguagens também.
A história até agora:
- Pitão
- Rubi
- .INTERNET
- Perl
- Java
- Javascript
- PHP
- A maioria deles
XPathExpression
pode ser usado (existente desde o Java 1.5)Respostas:
O equivalente mundial do Ruby à Beautiful Soup é o Hpricot do why_the_lucky_stiff .
fonte
No mundo .NET, eu recomendo o HTML Agility Pack. Não é tão simples quanto algumas das opções acima (como HTMLSQL), mas é muito flexível. Ele permite manipular HTML mal formado como se fosse XML bem formado, para que você possa usar XPATH ou apenas iterar sobre nós.
http://www.codeplex.com/htmlagilitypack
fonte
BeautifulSoup é um ótimo caminho a percorrer para a raspagem de HTML. Meu trabalho anterior me fez fazer muitas raspagens e gostaria de saber sobre a BeautifulSoup quando comecei. É como o DOM com muito mais opções úteis e é muito mais pitônico. Se você quiser experimentar o Ruby, eles portaram BeautifulSoup, chamando-o de RubyfulSoup, mas não foi atualizado há algum tempo.
Outras ferramentas úteis são HTMLParser ou sgmllib.SGMLParser, que fazem parte da biblioteca padrão do Python. Eles funcionam chamando métodos sempre que você digita / sai de uma tag e encontra texto html. Eles são como Expat, se você estiver familiarizado com isso. Essas bibliotecas são especialmente úteis se você estiver analisando arquivos muito grandes e a criação de uma árvore DOM seria longa e cara.
Expressões regulares não são muito necessárias. O BeautifulSoup lida com expressões regulares, portanto, se você precisar do poder delas, poderá utilizá-lo lá. Eu digo que vá com BeautifulSoup, a menos que você precise de velocidade e um espaço menor de memória. Se você encontrar um melhor analisador de HTML no Python, me avise.
fonte
Eu achei o HTMLSQL uma maneira ridiculamente simples de capturar telas . Demora literalmente minutos para obter resultados.
As consultas são super intuitivas - como:
Agora, existem outras alternativas que adotam a mesma abordagem.
fonte
A biblioteca Python lxml atua como uma ligação Pythonic para as bibliotecas libxml2 e libxslt. Gosto particularmente do suporte XPath e da impressão bonita da estrutura XML na memória. Ele também suporta a análise de HTML quebrado. E eu acho que você não pode encontrar outras bibliotecas / ligações Python que analisam o XML mais rapidamente que o lxml.
fonte
Para Perl, há WWW :: Mechanize.
fonte
O Python tem várias opções para raspagem de HTML, além da Beatiful Soup. Aqui estão alguns outros:
WWW:Mechanize
. Oferece a você um objeto semelhante ao navegador para inativar as páginas da weblibwww
. Suporta várias opções para percorrer e selecionar elementos (por exemplo, seleção XPath e CSS)fonte
'Simple HTML DOM Parser' é uma boa opção para PHP, se você estiver familiarizado com os seletores jQuery ou JavaScript, você se sentirá em casa.
Encontre aqui
Também há um post sobre isso aqui.
fonte
Por que ninguém mencionou o JSOUP ainda para Java? http://jsoup.org/
fonte
O templatemaker utilitário a partir Adrian Holovaty (de Django fama) usa uma abordagem muito interessante: você alimentá-lo variações da mesma página e ele "aprende", onde os "buracos" para dados variáveis são. Como o HTML não é específico, seria bom raspar qualquer outro conteúdo de texto sem formatação. Eu também o usei para PDFs e HTML convertidos em texto sem formatação (com pdftotext e lynx, respectivamente).
fonte
Conheço e amo Screen Scraper .
Screen-Scraper é uma ferramenta para extrair dados de sites. O raspador de tela automatiza:
Usos comuns:
Técnico:
Três edições do raspador de tela:
fonte
Gostaria de descobrir primeiro se os sites em questão fornecem um servidor de API ou feeds RSS para acessar os dados necessários.
fonte
O estouro da pilha de raspagem é especialmente fácil com o Shoes e o Hpricot .
fonte
Outra opção para o Perl seria o Web :: Scraper, que é baseado no Ruby Scrapi . Em poucas palavras, com sintaxe agradável e concisa, você pode obter um raspador robusto diretamente nas estruturas de dados.
fonte
Eu tive algum sucesso com o HtmlUnit , em Java. É uma estrutura simples para escrever testes de unidade nas UIs da Web, mas igualmente útil para a raspagem de HTML.
fonte
Yahoo! A linguagem de consulta ou YQL pode ser usada junto com jQuery, AJAX, JSONP para rastrear páginas da Web
fonte
Outra ferramenta para .NET é o MhtBuilder
fonte
Também existe esta solução: netty HttpClient
fonte
Eu uso o Hpricot no Ruby. Como exemplo, este é um trecho de código que eu uso para recuperar todos os títulos de livros das seis páginas da minha conta HireThings (como eles não parecem fornecer uma única página com essas informações):
É praticamente completo. Tudo o que vem antes disso são as importações da biblioteca e as configurações do meu proxy.
fonte
Eu usei bastante a Beautiful Soup com Python. É muito melhor que a verificação de expressões regulares, porque funciona como o DOM , mesmo que o HTML esteja mal formatado. Você pode encontrar rapidamente tags e texto HTML com sintaxe mais simples que as expressões regulares. Depois de encontrar um elemento, é possível iterar sobre ele e seus filhos, o que é mais útil para entender o conteúdo no código do que nas expressões regulares. Eu gostaria que a Beautiful Soup existisse anos atrás, quando eu tive que fazer muitas capturas de tela - isso me pouparia muito tempo e dor de cabeça, já que a estrutura HTML era tão ruim antes que as pessoas começassem a validá-la.
fonte
Embora tenha sido projetado para testes na Web .NET , eu tenho usado a estrutura WatiN para esse fim. Como é baseado em DOM, é muito fácil capturar HTML, texto ou imagens. Recentemente, usei-o para despejar uma lista de links de uma consulta de namespace do MediaWiki All Pages em uma planilha do Excel. O seguinte fragmento de código do VB.NET é bastante bruto, mas funciona.
fonte
Implementações do algoritmo de análise HTML5 : html5lib (Python, Ruby), Analisador HTML Validator.nu (Java, JavaScript; C ++ em desenvolvimento), Hubbub (C), Twintsam (C #; a seguir ).
fonte
Você seria um tolo se não usasse o Perl .. Aí vem as chamas ..
Osso nos módulos seguintes e ginsu qualquer arranhão ao redor.
fonte
Eu usei LWP e HTML :: TreeBuilder com Perl e os achei muito úteis.
O LWP (abreviação de libwww-perl) permite que você se conecte a sites e raspe o HTML. Você pode obter o módulo aqui e o livro O'Reilly parece estar online aqui .
TreeBuilder permite construir uma árvore a partir do HTML, e a documentação e a fonte estão disponíveis em HTML :: TreeBuilder - Analisador que cria uma árvore de sintaxe HTML .
Pode haver muito trabalho pesado ainda a ver com algo como essa abordagem. Não observei o módulo Mecanizar sugerido por outra resposta, por isso posso fazê-lo.
fonte
Em Java, você pode usar o TagSoup .
fonte
Bem, se você quiser fazer isso do lado do cliente usando apenas um navegador, você tem o jcrawl.com . Depois de projetar seu serviço de sucateamento a partir do aplicativo Web ( http://www.jcrawl.com/app.html ), você só precisará adicionar o script gerado a uma página HTML para começar a usar / apresentar seus dados.
Toda a lógica de sucateamento acontece no navegador via JavaScript. Espero que você ache útil. Clique neste link para ver um exemplo ao vivo que extrai as últimas notícias do Yahoo Tennis .
fonte
Você provavelmente já tem muito, mas acho que é isso que você está tentando fazer:
fonte
Eu tive resultados mistos no .NET usando o SgmlReader, que foi originalmente iniciado por Chris Lovett e parece ter sido atualizado pelo MindTouch .
fonte
Gosto da função ImportXML (URL, XPath) do Google Spreadsheets.
Ele repetirá as células na coluna se sua expressão XPath retornar mais de um valor.
Você pode ter até 50
importxml()
funções em uma planilha.O plug-in da Web do RapidMiner também é bastante fácil de usar. Ele pode publicar, aceitar cookies e definir o agente do usuário .
fonte
Eu também tive muito sucesso usando o Jaxer + jQuery do Aptana para analisar páginas. Não é tão rápido ou "tipo script" por natureza, mas os seletores de jQuery + JavaScript / DOM real são um salva-vidas em páginas mais complicadas (ou malformadas).
fonte