¿Cuáles son las mejores bibliotecas creadas previamente para realizar el rastreo web en Python [duplicado]?

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

  •  05-07-2019
  •  | 
  •  

Pregunta

Necesito rastrear y almacenar localmente para futuros análisis de los contenidos de una lista finita de sitios web. Básicamente, quiero absorber todas las páginas y seguir todos los enlaces internos para obtener todo el sitio disponible públicamente.

¿Existen bibliotecas gratuitas para llegar allí? He visto a Chilkat, pero es por paga. Sólo estoy buscando la funcionalidad de línea de base aquí. ¿Pensamientos? Sugerencias?


Duplicado exacto: ¿Alguien sabe de un buen rastreador web basado en python que pueda usar?

¿Fue útil?

Solución

Utilice Scrapy .

Es un marco de rastreador web basado en trenzas. Todavía en desarrollo pesado pero ya funciona. Tiene muchas golosinas:

  • Compatibilidad incorporada para analizar HTML, XML, CSV y Javascript
  • Un canal de medios para raspar elementos con imágenes (o cualquier otro medio) y descargar los archivos de imágenes también
  • Soporte para extender Scrapy conectando su propia funcionalidad usando middlewares, extensiones y tuberías
  • Amplia gama de middlewares integrados y extensiones para el manejo de compresión, caché, cookies, autenticación, suplantación de agente de usuario, manejo de robots.txt, estadísticas, restricción de profundidad de rastreo, etc.
  • consola de shell de raspado interactivo, muy útil para desarrollar y depurar
  • Consola de administración web para monitorear y controlar tu bot
  • Consola Telnet para acceso de bajo nivel al proceso Scrapy

Código de ejemplo para extraer información sobre todos los archivos de torrent agregados hoy en el mininova del sitio, mediante un XPath Selector en el HTML devuelto:

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]

Otros consejos

¿Realmente necesitas una biblioteca? Recomiendo encarecidamente Heritrix como un excelente rastreador de propósito general que preservará toda la página web (a diferencia de los rastreadores más comunes) que almacenan solo parte del texto). Es un poco áspero alrededor de los bordes, pero funciona muy bien.

Dicho esto, puedes probar el HarvestMan http://www.harvestmanontheweb.com/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top