Raspador de GUI que permite extraer un elemento específico de una página web para una lista de URL que tienen una estructura similar

Estoy buscando un programa que pueda extraer un elemento específico de una página web para obtener una lista de páginas que tengan una estructura similar.

Para decirlo de otra manera, primero especificaría la ubicación del texto que me interesa, por ejemplo, el título de una pregunta de StackExchange:

ingrese la descripción de la imagen aquí

luego proporcione una lista de URL que apunten a otras preguntas de StackExchange (es decir, una estructura de página similar). El raspador debe extraer los títulos de esas páginas. Está bien si la información que se va a extraer debe estar en un div o lapso específico.

Gratis, Windows 7, GUI y código abierto son mejores.

Por supuesto , está bien si la información que se va a extraer debe estar en un div o lapso específico . No solo está bien, es un requisito. El texto de una página web no tiene ninguna característica que lo identifique, el software tendría que analizar la estructura HTML de su página de muestra, determinar en qué elemento HTML se encuentra el texto y luego extraer el contenido del mismo elemento HTML en las otras URL. usted especificó.

Respuestas (1)

Puedes hacer exactamente este tipo de cosas con python y scrapy .

En cuanto a sus necesidades específicas:

  • Gratis - Sí
  • Windows 7: multiplataforma, así que sí
  • Código abierto - Sí
  • GUI: no inherentemente, pero hay muchas herramientas de python que le permiten implementar su propia GUI si las necesita, estas incluyen tk (viene con python), wxPython (mi preferido) y muchos otros.

Hay mucha documentación en línea y una etiqueta de desbordamiento de pila como una posible fuente de ayuda y ejemplos. Un ejemplo del uso de la línea de comandos, de la página web de Scapy:

pip install scrapy
cat > myspider.py <<EOF

from scrapy import Spider, Item, Field

class Post(Item):
    title = Field()

class BlogSpider(Spider):
    name, start_urls = 'blogspider', ['http://blog.scrapinghub.com']

    def parse(self, response):
        return [Post(title=e.extract()) for e in response.css("h2 a::text")]

EOF
scrapy runspider myspider.py

Cuando ejecuto lo anterior obtengo:

2014-10-22 06:18:04+0100 [blogspider] DEBUG: Scraped from <200 http://blog.scrapinghub.com>
        {'title': u'XPath tips from the web scraping\xa0trenches'} 2014-10-22 06:18:04+0100 [blogspider] DEBUG: Scraped from <200 http://blog.scrapinghub.com>
        {'title': u'Introducing Data Reviews'} 2014-10-22 06:18:04+0100 [blogspider] DEBUG: Scraped from <200 http://blog.scrapinghub.com>
        {'title': u'Extracting schema.org microdata using Scrapy selectors and\xa0XPath'} 2014-10-22 06:18:04+0100 [blogspider] DEBUG: Scraped from <200 http://blog.scrapinghub.com>
        {'title': u'Announcing Portia, the open source visual web\xa0scraper!'} 2014-10-22 06:18:04+0100 [blogspider] DEBUG: Scraped from <200 http://blog.scrapinghub.com>
        {'title': u'Optimizing memory usage of scikit-learn models using succinct\xa0Tries'} 2014-10-22 06:18:04+0100 [blogspider] DEBUG: Scraped from <200 http://blog.scrapinghub.com>
        {'title': u'Open Source at\xa0Scrapinghub'} 2014-10-22 06:18:04+0100 [blogspider] DEBUG: Scraped from <200 http://blog.scrapinghub.com>
        {'title': u'Looking back at\xa02013'} 2014-10-22 06:18:04+0100 [blogspider] INFO: Closing spider (finished)

Cuáles son los elementos del encabezado 2 del sitio referenciado.

¿Podría explicar un poco más cómo se haría esto? Se lee como si el OP necesita codificar esto él mismo (en lugar de tener una herramienta preparada) ¿correcto?