Quais são as melhores bibliotecas pré -construídas para fazer rastreamento na web em Python [duplicado

StackOverflow https://stackoverflow.com/questions/421283

  •  05-07-2019
  •  | 
  •  

Pergunta

Preciso rastejar e armazenar localmente para análises futuras o conteúdo de uma lista finita de sites. Basicamente, quero dar à luz em todas as páginas e seguir todos os links internos para obter todo o site publicamente disponível.

Existem bibliotecas gratuitas para me levar até lá? Eu vi chilkat, mas é para pagamento. Estou apenas procurando a funcionalidade da linha de base aqui. Pensamentos? Sugestões?


Duplicata exata: Alguém conhece um bom rastreador da web baseado em Python que eu poderia usar?

Foi útil?

Solução

Usar Scrapy.

É uma estrutura de rastreador de web baseada em torcida. Ainda sob desenvolvimento pesado, mas já funciona. Tem muitos presentes:

  • Suporte interno para analisar HTML, XML, CSV e JavaScript
  • Um pipeline de mídia para raspar itens com imagens (ou qualquer outra mídia) e baixar os arquivos de imagem também
  • Suporte para estender o SCRAPY conectando sua própria funcionalidade usando middlewares, extensões e pipelines
  • Ampla gama de usuários médios e extensões interno para manuseio de compressão, cache, cookies, autenticação, falsificação de agente do usuário, robots.txt manuseio, estatísticas, restrição de profundidade de rastreamento, etc.
  • Console de shell interativo de raspagem, muito útil para desenvolver e depuração
  • Console de gerenciamento da web para monitorar e controlar seu bot
  • Console de telnet para acesso de baixo nível ao processo de scrapy

Exemplo de código para extrair informações sobre todos os arquivos de torrent adicionados hoje no Mininova Site Torrent, usando um seletor XPath no HTML retornado:

class Torrent(ScrapedItem):
    pass

class MininovaSpider(CrawlSpider):
    domain_name = 'mininova.org'
    start_urls = ['http://www.mininova.org/today']
    rules = [Rule(RegexLinkExtractor(allow=['/tor/\d+']), 'parse_torrent')]

    def parse_torrent(self, response):
        x = HtmlXPathSelector(response)
        torrent = Torrent()

        torrent.url = response.url
        torrent.name = x.x("//h1/text()").extract()
        torrent.description = x.x("//div[@id='description']").extract()
        torrent.size = x.x("//div[@id='info-left']/p[2]/text()[2]").extract()
        return [torrent]

Outras dicas

Você realmente precisa de uma biblioteca? Eu recomendo fortemente Heritrix Como um grande rastreador de uso geral, que preservará toda a página da web (em oposição aos rastreadores mais comuns que armazenam apenas parte do texto). É um pouco difícil nas bordas, mas funciona muito bem.

Dito isto, você pode experimentar o colheita http://www.harvestmanontheweb.com/

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