Opções para raspagem HTML?

votos
378

Eu estou pensando em tentar Beautiful Soup , um pacote Python para raspagem HTML. Existem outros pacotes de raspagem HTML que eu deveria estar olhando? Python não é um requisito, eu estou realmente interessado em ouvir sobre outras línguas também.

A história até agora:

Publicado 05/08/2008 em 22:09
fonte usuário
Em outras línguas...                            


40 respostas

votos
54

Equivalente do mundo Ruby para Beautiful Soup é de why_the_lucky_stiff Hpricot .

Respondeu 05/08/2008 em 22:13
fonte usuário

votos
39

No mundo do .NET, recomendo a agilidade pacote HTML. Não é perto de tão simples como algumas das opções acima (como HTMLSQL), mas é muito flexível. Ele permite que você maniuplate mal formado HTML como se fosse bem formado XML, assim você pode usar XPath ou apenas itereate sobre nós.

http://www.codeplex.com/htmlagilitypack

Respondeu 07/08/2008 em 19:38
fonte usuário

votos
32

BeautifulSoup é um grande caminho a percorrer para raspagem HTML. Meu trabalho anterior tinha me fazendo um monte de raspagem e eu gostaria de saber sobre BeautifulSoup quando eu comecei. É como o DOM com um monte opções mais úteis e é muito mais Python. Se você quiser tentar Rubi eles portado BeautifulSoup chamando-RubyfulSoup mas não foi atualizado em quando.

Outras ferramentas úteis são HTMLParser ou sgmllib.SGMLParser que fazem parte da biblioteca padrão do Python. Estes trabalhos, chamando métodos cada vez que você entrar / sair de um tag e html encontro texto. Eles são como Expat se você estiver familiarizado com isso. Essas bibliotecas são especialmente úteis se você estiver indo para analisar arquivos muito grandes e criar uma árvore DOM seria longo e caro.

As expressões regulares não são muito necessárias. BeautifulSoup lida com expressões regulares por isso, se você precisa de sua energia que você pode utilizá-lo lá. Eu digo ir com BeautifulSoup a menos que você precisa de velocidade e um menor consumo de memória. Se você encontrar um analisador melhor HTML em Python, me avise.

Respondeu 07/08/2008 em 19:18
fonte usuário

votos
18

Eu encontrei HTMLSQL ser uma maneira ridiculamente simples de screenscrape. É preciso, literalmente minutos para obter resultados com ele.

As consultas são super-intuitiva - como:

SELECT title from img WHERE $class == 'userpic'

Existem hoje algumas outras alternativas que levam a mesma abordagem.

Respondeu 07/08/2008 em 19:31
fonte usuário

votos
16

Os Python lxml biblioteca funciona como um Pythonic vinculativos para as bibliotecas libxml2 e libxslt. Gosto particularmente o seu apoio XPath e impressão bonita da estrutura XML na memória. Ele também suporta a análise de HTML quebrado. E eu não acho que você pode encontrar outros Python bibliotecas / ligações que analisam XML mais rápido do que lxml.

Respondeu 17/09/2008 em 13:44
fonte usuário

votos
15

Para Perl, há WWW :: mechanize.

Respondeu 06/08/2008 em 00:37
fonte usuário

votos
11

Por que ninguém mencionou JSOUP ainda para Java? http://jsoup.org/

Respondeu 10/02/2012 em 20:42
fonte usuário

votos
11

'Simple HTML DOM Parser' é uma boa opção para PHP, se o seu familiarizado com jQuery ou JavaScript seletores então você vai encontrar-se em casa.

Encontrá-lo aqui

Há também um post sobre isso aqui.

Respondeu 31/07/2009 em 20:39
fonte usuário

votos
10

Python tem várias opções para HTML raspagem, além de Beatiful Soup. Aqui estão alguns outros:

  • mecanizar : semelhante ao perl WWW:Mechanize. Dá-lhe um navegador como o objeto para ineract com páginas da web
  • lxml : Python ligação a libwww. Suporta várias opções para atravessar e selecione elementos (por exemplo, XPath e seleção CSS)
  • scrapemark : biblioteca de alto nível utilizando modelos para extrair informações de HTML.
  • pyquery : permite que você faça jQuery como consultas sobre documentos XML.
  • scrapy : uma raspagem alto nível e web crawling quadro. Ele pode ser usado para escrever aranhas, para a mineração de dados e para o monitoramento e testes automatizados
Respondeu 28/12/2009 em 17:59
fonte usuário

votos
9

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. Não é HTML específico, por isso seria bom para raspar qualquer outro conteúdo de texto simples assim. Eu usei-o também para PDFs e HTML convertidos em texto simples (com pdftotext eo lince, respectivamente).

Respondeu 18/09/2008 em 21:13
fonte usuário

votos
7

Eu conheço e amo Screen-raspador .

Screen-raspador é uma ferramenta para extrair dados de sites. Screen-raspador automatiza:

* Clicking links on websites
* Entering data into forms and submitting
* Iterating through search result pages
* Downloading files (PDF, MS Word, images, etc.)

Os usos mais comuns:

* Download all products, records from a website
* Build a shopping comparison site
* Perform market research
* Integrate or migrate data

Técnico:

* Graphical interface--easy automation
* Cross platform (Linux, Mac, Windows, etc.)
* Integrates with most programming languages (Java, PHP, .NET, ASP, Ruby, etc.)
* Runs on workstations or servers

Três edições do screen-raspador:

* Enterprise: The most feature-rich edition of screen-scraper. All capabilities are enabled.
* Professional: Designed to be capable of handling most common scraping projects.
* Basic: Works great for simple projects, but not nearly as many features as its two older brothers.
Respondeu 16/08/2009 em 21:56
fonte usuário

votos
7

Gostaria em primeiro lugar saber se o site (s) em questão fornecer um servidor API ou RSS Feeds para o acesso a dados de que necessita.

Respondeu 05/08/2008 em 22:11
fonte usuário


votos
5

Eu tive algum sucesso com HtmlUnit , em Java. É uma estrutura simples para escrever testes de unidade na web UI, mas igualmente útil para raspagem HTML.

Respondeu 31/08/2008 em 13:09
fonte usuário

votos
5

Outra opção para Perl seria Web :: Scraper que é baseado no Ruby scrAPI . Em poucas palavras, com a sintaxe agradável e concisa, você pode obter um raspador robusta diretamente em estruturas de dados.

Respondeu 26/08/2008 em 23:46
fonte usuário

votos
5

Raspagem Stack Overflow é especialmente fácil com sapatos e Hpricot .

require 'hpricot'

Shoes.app :title => "Ask Stack Overflow", :width => 370 do
  SO_URL = "http://stackoverflow.com"
  stack do
    stack do
      caption "What is your question?"
      flow do
        @lookup = edit_line "stackoverflow", :width => "-115px"
        button "Ask", :width => "90px" do
          download SO_URL + "/search?s=" + @lookup.text do |s|
            doc = Hpricot(s.response.body)
            @rez.clear()
            (doc/:a).each do |l|
              href = l["href"]
              if href.to_s =~ /\/questions\/[0-9]+/ then
                @rez.append do
                  para(link(l.inner_text) { visit(SO_URL + href) })
                end
              end
            end
            @rez.show()
          end
        end
      end
    end
    stack :margin => 25 do
      background white, :radius => 20
      @rez = stack do
      end
    end
    @rez.hide()
  end
end
Respondeu 22/08/2008 em 11:20
fonte usuário

votos
4

Há esta solução também: netty HttpClient

Respondeu 11/05/2011 em 19:28
fonte usuário

votos
4

Outra ferramenta para .NET é MhtBuilder

Respondeu 13/02/2009 em 13:58
fonte usuário

votos
4

Embora tenha sido projetado para .NET web-teste, eu estive usando o WatiN estrutura para esta finalidade. Uma vez que é DOM-based, é muito fácil de capturar HTML, texto ou imagens. Recentely, eu usei-o para despejar uma lista de links de um MediaWiki consulta namespace Todas as páginas em uma planilha do Excel. A seguir VB.NET código fragement é muito bruto, mas funciona.


Sub GetLinks(ByVal PagesIE As IE, ByVal MyWorkSheet As Excel.Worksheet)

    Dim PagesLink As Link
    For Each PagesLink In PagesIE.TableBodies(2).Links
        With MyWorkSheet
            .Cells(XLRowCounterInt, 1) = PagesLink.Text
            .Cells(XLRowCounterInt, 2) = PagesLink.Url
        End With
        XLRowCounterInt = XLRowCounterInt + 1
    Next
End Sub
Respondeu 27/08/2008 em 10:43
fonte usuário

votos
4

Eu usei bonito Soup muito com Python. É muito melhor do que a verificação de expressão regular, porque funciona como usar o DOM , mesmo que o HTML está mal formatado. Você pode encontrar rapidamente as tags HTML e texto com a sintaxe mais simples do que as expressões regulares. Depois de encontrar um elemento, você pode iterar sobre ele e seus filhos, o que é mais útil para compreender o conteúdo em código do que é com expressões regulares. Desejo Beautiful Soup existia anos atrás, quando eu tive que fazer um monte de screenscraping - que teria me salvou um monte de tempo e dor de cabeça desde a estrutura HTML era tão pobre antes de as pessoas começaram a validá-lo.

Respondeu 22/08/2008 em 14:58
fonte usuário

votos
4

Eu uso Hpricot em Ruby. Como exemplo este é um trecho de código que eu uso para recuperar todos os títulos de livros dos seis páginas da minha conta HireThings (como eles não parecem fornecer uma única página com esta informação):

pagerange = 1..6
proxy = Net::HTTP::Proxy(proxy, port, user, pwd)
proxy.start('www.hirethings.co.nz') do |http|
  pagerange.each do |page|
    resp, data = http.get "/perth_dotnet?page=#{page}" 
    if resp.class == Net::HTTPOK
      (Hpricot(data)/"h3 a").each { |a| puts a.innerText }
    end
  end
end 

É praticamente completa. Tudo o que vem antes disso são as importações de biblioteca e as configurações para o meu proxy.

Respondeu 06/08/2008 em 06:57
fonte usuário

votos
3

Bem, se você deseja que seja feito do lado do cliente usando apenas um navegador que você tem jcrawl.com . Depois de ter criado seu serviço de demolição da aplicação web ( http://www.jcrawl.com/app.html ), você só precisa adicionar o script gerado para uma página HTML para começar a usar / apresentar seus dados.

Toda a lógica demolição acontece no navegador via JavaScript. Eu espero que você encontrá-lo útil. Clique neste link para um exemplo vivo que extrai o últimas notícias do tênis Yahoo .

Respondeu 29/10/2012 em 16:59
fonte usuário

votos
3

Implementações do algoritmo de análise HTML5 : html5lib (Python, Ruby), Validator.nu HTML Parser (Java, JavaScript, C ++ em desenvolvimento), Hubbub (C), Twintsam (C #; futuras).

Respondeu 09/10/2008 em 21:53
fonte usuário

votos
3

Você seria um tolo para não usar Perl .. Aqui vêm as chamas ..

Osso-se sobre as seguintes módulos e Ginsu qualquer raspar em torno.

use LWP
use HTML::TableExtract
use HTML::TreeBuilder
use HTML::Form
use Data::Dumper
Respondeu 17/09/2008 em 13:56
fonte usuário

votos
3

Em Java, você pode usar TagSoup .

Respondeu 24/08/2008 em 11:32
fonte usuário

votos
3

Eu tenho usado LWP e HTML :: TreeBuilder com Perl e Encontraram muito útil.

LWP (abreviação de libwww-perl) permite que você se conectar a sites e raspar o HTML, você pode obter o módulo aqui eo livro O'Reilly parece ser on-line aqui .

TreeBuilder permite construir uma árvore do HTML, e documentação e fonte estão disponíveis em HTML :: TreeBuilder - Analisador que constrói uma árvore de sintaxe HTML .

Pode haver demasiada pesada carga ainda a ver com algo parecido com essa abordagem embora. Eu não olhei para o módulo Mecanizar sugerido por outra resposta, então eu também pode fazer isso.

Respondeu 17/08/2008 em 15:13
fonte usuário

votos
2

Eu gosto de função do Google Spreadsheets' ImportXML (URL, XPath).

Ele vai repetir células para baixo a coluna se a sua expressão XPath retorna mais de um valor.

Você pode ter até 50 importxml()funções em uma planilha.

Plugin Web do RapidMiner também é muito fácil de usar. Ele pode fazer mensagens, aceite cookies, e pode definir o user-agent .

Respondeu 22/07/2010 em 05:31
fonte usuário

votos
2

Eu também tive grande sucesso usando o Aptana Jaxer + jQuery para analisar páginas. Não é tão rápido ou 'roteiro-like' na natureza, mas seletores jQuery + verdadeira JavaScript / DOM é um salva-vidas em páginas mais complicadas (ou mal formados).

Respondeu 19/11/2008 em 20:11
fonte usuário

votos
2

Eu tive resultados mistos em .NET usando SgmlReader que foi originalmente iniciados por Chris Lovett e parece ter sido atualizado por MindTouch .

Respondeu 27/08/2008 em 19:49
fonte usuário

votos
2

Você provavelmente tem tanto já, mas eu acho que isso é o que você está tentando fazer:

from __future__ import with_statement
import re, os

profile = ""

os.system('wget --no-cookies --header "Cookie: soba=(SeCreTCODe)" http://stackoverflow.com/users/30/myProfile.html')
with open("myProfile.html") as f:
    for line in f:
        profile = profile + line
f.close()
p = re.compile('summarycount">(\d+)</div>') #Rep is found here
print p
m = p.search(profile)
print m
print m.group(1)
os.system("espeak \"Rep is at " + m.group(1) + " points\""
os.remove("myProfile.html")
Respondeu 05/08/2008 em 23:58
fonte usuário

votos
1

Eu faço um monte de web avançado raspagem assim queria ter o controle total sobre a minha stack e compreender as limitações. Esta biblioteca webscraping é o resultado.

Respondeu 12/04/2011 em 01:20
fonte usuário

votos
1

Eu tenho usado Feedity - http://feedity.com para alguns dos trabalhos de raspagem (e conversão em RSS feeds) em minha biblioteca. Ele funciona bem para a maioria das páginas.

Respondeu 01/12/2010 em 06:28
fonte usuário

votos
1

A conversa recente de Dav de vidro Bem-vindo à selva! (YUIConf 2011 Abertura Keynote) mostra como você pode usar YUI 3 em Node.js para fazer programação clientside-like (com seletores DOM em vez de processamento de strings) no servidor. É muito impressionante.

Respondeu 22/11/2010 em 18:04
fonte usuário

votos
1

Para aplicações de raspagem mais complexas, eu recomendaria o raspador web IRobotSoft. É um software livre dedicado para captura de tela. Tem uma linguagem de consulta forte para páginas HTML, e fornece uma interface de gravação web muito simples que irá livrá-lo de muitos esforço de programação.

Respondeu 17/05/2010 em 16:58
fonte usuário

votos
1

Scrubyt usa Ruby e Hpricot fazer agradável e fácil web scraping. Eu escrevi um raspador para o serviço de biblioteca de minha universidade usando este em cerca de 30 minutos.

Respondeu 25/08/2008 em 13:02
fonte usuário

votos
1

As expressões regulares funcionam muito bem para HTML raspagem bem ;-) Embora depois de olhar para Beautiful Soup, eu posso ver por que isso seria uma ferramenta valiosa.

Respondeu 05/08/2008 em 22:29
fonte usuário

votos
0

Quando se trata de extrair dados de um documento HTML no lado do servidor, Node.js é uma opção fantástica. Eu tenho usado com sucesso com dois módulos chamados pedido e cheerio .

Você pode ver um exemplo de como isso funciona aqui .

Respondeu 10/05/2013 em 19:28
fonte usuário

votos
0

Fiz muito agradáveis biblioteca ferramentas da Internet para web scraping.

A ideia é combinar um modelo contra a página web, que irá extrair todos os dados da página e também validar se a estrutura da página é inalterada.

Então você pode simplesmente pegar o código HTML da página da Web que deseja processar, remover todo o conteúdo dinâmico ou irrelevante e anotar as partes interessantes.

Por exemplo, o HTML para uma nova pergunta na página de índice stackoverflow.com é:

<div id="question-summary-11326954" class="question-summary narrow">

    <!-- skipped, this is getting too long -->

    <div class="summary">

        <h3><a title="Some times my tree list have vertical scroll ,then I scrolled very fast and the tree list shivered .Have any solution for this.
" class="question-hyperlink" href="/questions/11326954/about-scroll-bar-issue-in-tree">About Scroll bar issue in Tree</a></h3>

    <!-- skipped -->

    </div>
</div>

Então você acabou de remover este ID certa, título e resumo, para criar um modelo que irá ler todas as novas perguntas em título, resumo, Link-matrizes:

 <t:loop>
   <div class="question-summary narrow">
     <div class="summary">
       <h3>
          <a class="question-hyperlink">
            {title:=text(), summary:=@title, link:=@href}
          </a>
       </h3>
     </div>
   </div>
 </t:loop>

E é claro que também suporta as técnicas básicas, CSS 3 seletores, XPath 2 e XQuery 1 expressões.

O único problema é que eu era tão estúpido para torná-lo um Free Pascal biblioteca. Mas há também uma linguagem independente web demonstração .

Respondeu 04/07/2012 em 11:43
fonte usuário

votos
0

Para aqueles que preferem uma ferramenta de fluxo de trabalho gráfico, RapidMiner (FOSS) tem um bom web rastreamento e raspagem facilidade.

Aqui está uma série de vídeos:

http://vancouverdata.blogspot.com/2011/04/rapidminer-web-crawling-rapid-miner-web.html

Respondeu 04/04/2011 em 23:44
fonte usuário

votos
-1

SharpQuery

É basicamente jQuery para C #. Ele depende da agilidade Pacote de HTML para analisar o HTML.

Respondeu 01/12/2010 em 06:41
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more