Octavodia
Categorías
  • Aplicaciones
  • Blog
  • Ciencia
  • Comentarios tecnología
  • Correo Web
  • Electrónica
  • Historia Tecnología
  • Información
  • Tecnología
  • Test Tecnología
  • Vida
Octavodia
  • Blog

Cómo crear un rastreador web básico con Scrapy

Total
0
Shares
0
0
0

Los programas que leen información de una página web o un rastreador web tienen todo tipo de aplicaciones útiles.

Escribir estos programas de rastreo web es más fácil de lo que cree. Python tiene una biblioteca excelente para escribir scripts que extraen información de páginas web. ¡Veamos cómo crear un rastreador web con Scrapy a través del siguiente artículo!

Utilice Scrapy para crear rastreadores web

  1. Instalar Scrapy
  2. Cómo crear un rastreador web
    1. Desactivar el registro
    2. Utilice Chrome Inspector
    3. Extraer título
    4. Encontrar descripción
  3. Recopilar datos JSON
  4. Explota muchos factores

Instalar Scrapy

Scrapy es una biblioteca de Python creada para escanear y construir rastreadores web. Es rápido, simple y puede navegar por muchos sitios web sin mucho esfuerzo.

Scrapy está disponible a través de la biblioteca Pip Installs Python (PIP). Para saber cómo instalar PIP, consulte el artículo: Instalación del paquete Python con PIP en Windows, Mac y Linux.

Se prefiere el uso del entorno virtual Python porque le permitirá instalar Scrapy en un directorio virtual y mantener intacto el sistema de archivos. La documentación de Scrapy recomienda hacer esto para obtener mejores resultados.

Cree directorios e inicialice un entorno virtual.

 mkdir crawler cd crawler virtualenv venv . venv/bin/activate 

Ahora puede instalar Scrapy en ese directorio usando el comando PIP.

 pip install scrapy 

Verificación rápida para asegurarse de que Scrapy esté instalado correctamente:

 scrapy # prints Scrapy 1.4.0 - no active project Usage: scrapy [options] [args] Available commands: bench Run quick benchmark test fetch Fetch a URL using the Scrapy downloader genspider Generate new spider using pre-defined templates runspider Run a self-contained spider (without creating a project) .   scrapy # prints Scrapy 1.4.0 - no active project Usage: scrapy [options] [args] Available commands: bench Run quick benchmark test fetch Fetch a URL using the Scrapy downloader genspider Generate new spider using pre-defined templates runspider Run a self-contained spider (without creating a project) . 

Scrapy

Cómo crear un rastreador web

Ahora que el entorno está listo, puede comenzar a crear rastreadores web. Eche un vistazo a la información de la página de Wikipedia sobre baterías:

 https://en.wikipedia.org/wiki/Battery_(electricity) 

El primer paso para escribir un rastreador es definir la clase Python que se extiende desde Scrapy Araña. Esto le da acceso a todas las funciones de Scrapy. Llame a esta clase araña1.

La clase araña necesita algo de información:

  1. Nombre ( nombre ) para identificar la araña
  2. los start_urls La variable contiene una lista de URL para rastrear (las URL de Wikipedia serán ejemplos en este tutorial)
  3. los método parse () se utiliza para procesar páginas web y extraer información.
 import scrapy class spider1(scrapy.Spider): name="Wikipedia" start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)'] def parse(self, response): pass 

Una prueba rápida para asegurarse de que todo funcione correctamente.

 scrapy araña araña1.py # impresiones 2017-11-23 09:09:21 [scrapy.utils.log] INFORMACIÓN: Scrapy 1.4.0 comenzó (bot: scrapybot) 2017-11-23 09:09:21 [scrapy.utils.log] INFO: Configuración anulada: {'SPIDER_LOADER_WARN_ONLY': True} 2017-11-23 09:09:21 [scrapy.middleware] INFO: Extensiones habilitadas: ['scrapy.extensions.memusage.MemoryUsage', 'scrapy.extensions.logstats.LogStats', 

Turn off logging

Running Scrapy with this class will export log information which will not help at the moment. Make things simple by removing this redundant log information. Add the following code to the beginning of the file.

 import logging logging.getLogger('scrapy').setLevel(logging.WARNING) 

Now when you run the script again, the log information will not be printed.

Use Chrome Inspector

Everything on a web page is stored in HTML elements. Elements are organized in the Document Object Model (DOM). Understanding the DOM is important to make the most of the web crawler. Web crawlers search through all the HTML elements on a page to find information, so it’s important to understand how they are organized.

Google Chrome has tools to help you find HTML elements faster. You can position the HTML in any element you see on the web with the inspector.

  1. Navigate to a page in Chrome
  2. Place your mouse over the element you want to see
  3. Right click and select Inspect from the menu

These steps will open the developer console with the Elements tab selected. At the bottom of the console, you will see a tree diagram containing the elements. This tree diagram is how you will get information for the script.

Extract title

Use the script to do some work. Gather simple information to get the site’s title text.

Start the script by adding some code to the parse () method to extract the title.

 . def parse(self, response): print response.css('h1#firstHeading::text').extract() . 

The response argument supports a method called CSS () that selects elements from the page using the location you provide.

In this example, the element is h1.firstHeading. Adding :: text to the script is what is needed to give you the content of the element. Finally, the extract () method returns the selected element.

Run this script in Scrapy to export the title in text form.

 [u'Battery (electricity)'] 

Encontrar descripción

Ahora hemos extraído el texto del título. Haga más con los guiones. El rastreador encontrará el primer párrafo después del título y extraerá esta información.

A continuación, se muestra un diagrama de árbol de elementos en Chrome Developer Console:

 div#mw-content-text>div>p 

La flecha derecha ( > ) indica la relación padre-hijo entre los elementos. Esta posición devolverá todas las coincidencias pag elementos, incluida la descripción completa. Para conseguir el primero pag elemento, puede escribir este código:

 response.css('div#mw-content-text>div>p')[0] 

Al igual que el título, agrega :: texto para obtener el contenido de texto del elemento.

 response.css('div#mw-content-text>div>p')[0].css('::text') 

La expresión final usa extraer () para devolver la lista. Puedes usar Python unirse () función para concatenar listas después de que se complete el rastreo.

 def parse(self, response): print ''.join(response.css('div#mw-content-text>div>p')[0].css('::text').extract()) 

¡El resultado es el primer párrafo del texto!

 An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is . 

Recopilar datos JSON

Scrapy puede extraer información en forma de texto, muy útil. Scrapy también le permite ver datos de notación de objetos JavaScript (JSON). JSON es una forma ordenada de organizar la información y se usa ampliamente en el desarrollo web. JSON también funciona bastante bien con Python.

Cuando necesite recopilar datos en formato JSON, puede utilizar el rendimiento declaración integrada en Scrapy.

Aquí, una nueva versión del script usa el rendimiento declaración . En lugar de tomar la primera pag elemento en formato de texto, esta declaración recuperará todos los pag elementos y organizarlo en formato JSON.

 . def parse(self, response): for e in response.css('div#mw-content-text>div>p'): yield { 'para' : ''.join(e.css('::text').extract()).strip() } . 

Ahora, puede ejecutar el araña especificando la salida JSON archivo:

 scrapy runspider spider3.py -o joe.json 

El script ahora generará todos pag elementos.

 [ {"para": "An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is the cathode and its negative terminal is the anode.[2] The terminal marked negative is the source of electrons that when connected to an external circuit will flow and deliver energy to an external device. When a battery is connected to an external circuit, electrolytes are able to move as ions within, allowing the chemical reactions to be completed at the separate terminals and so deliver energy to the external circuit. It is the movement of those ions within the battery which allows current to flow out of the battery to perform work.[3] Historically the term "battery" specifically referred to a device composed of multiple cells, however the usage has evolved additionally to include devices composed of a single cell.[4]"}, {"para": "Primary (single-use or "disposable") batteries are used once and discarded; the electrode materials are irreversibly changed during discharge. Common examples are the alkaline battery used for flashlights and a multitude of portable electronic devices. Secondary (rechargeable) batteries can be discharged and recharged multiple . 

Explota muchos factores

Hasta ahora, el rastreador web ha tocado el título y un tipo de elemento de la página. Scrapy también puede extraer información de diferentes tipos de elementos en un script.

No dude en extraer los principales éxitos de taquilla de IMDb del fin de semana. Esta información se toma de http://www.imdb.com/chart/boxoffice , en una tabla con filas para cada métrica.

los método parse () puede extraer varios campos de una fila. Con las herramientas para desarrolladores de Chrome, puede encontrar elementos anidados en la tabla.

 . def parse(self, response): for e in response.css('div#boxoffice>table>tbody>tr'): yield { 'title': ''.join(e.css('td.titleColumn>a::text').extract()).strip(), 'weekend': ''.join(e.css('td.ratingColumn')[0].css('::text').extract()).strip(), 'gross': ''.join(e.css('td.ratingColumn')[1].css('span.secondaryInfo::text').extract()).strip(), 'weeks': ''.join(e.css('td.weeksColumn::text').extract()).strip(), 'image': e.css('td.posterColumn img::attr(src)').extract_first(), } . 

El selector imagen identifica que img es descendiente de td.posterColumn. Para extraer el atributo correcto, use la expresión :: attr (src).

Ejecutar spider devuelve JSON:

 [ {"gross": "$93.8M", "weeks": "1", "weekend": "$93.8M", "image": "https://images-na.ssl-images-amazon.com/images/M/MV5BYWVhZjZkYTIt[email protected]._V1_UY67_CR0,0,45,67_AL_.jpg", "title": "Justice League"}, {"gross": "$27.5M", "weeks": "1", "weekend": "$27.5M", "image": "https://images-na.ssl-images-amazon.com/images/M/MV5BYjFhOWY0OTgt[email protected]._V1_UX45_CR0,0,45,67_AL_.jpg", "title": "Wonder"}, {"gross": "$247.3M", "weeks": "3", "weekend": "$21.7M", "image": "https://images-na.ssl-images-amazon.com/images/M/[email protected]_V1_UY67_CR0,0,45,67_AL_.jpg", "title": "Thor: Ragnarok"}, . ] 

rastreador web

Los programas que leen información de una página web o un rastreador web tienen todo tipo de aplicaciones útiles.

Escribir estos programas de rastreo web es más fácil de lo que cree. Python tiene una biblioteca excelente para escribir scripts que extraen información de páginas web. ¡Veamos cómo crear un rastreador web con Scrapy a través del siguiente artículo!

Utilice Scrapy para crear rastreadores web

  1. Instalar Scrapy
  2. Cómo crear un rastreador web
    1. Desactivar el registro
    2. Utilice Chrome Inspector
    3. Extraer título
    4. Encontrar descripción
  3. Recopilar datos JSON
  4. Explota muchos factores

Instalar Scrapy

Scrapy es una biblioteca de Python creada para escanear y construir rastreadores web. Es rápido, simple y puede navegar por muchos sitios web sin mucho esfuerzo.

Scrapy está disponible a través de la biblioteca Pip Installs Python (PIP). Para saber cómo instalar PIP, consulte el artículo: Instalación del paquete Python con PIP en Windows, Mac y Linux.

Se prefiere el uso del entorno virtual de Python porque le permitirá instalar Scrapy en un directorio virtual y mantener intacto el sistema de archivos. La documentación de Scrapy recomienda hacer esto para obtener mejores resultados.

Cree directorios e inicialice un entorno virtual.

 mkdir crawler cd crawler virtualenv venv . venv/bin/activate 

Ahora puede instalar Scrapy en ese directorio usando el comando PIP.

 pip install scrapy 

Verificación rápida para asegurarse de que Scrapy esté instalado correctamente:

 scrapy # prints Scrapy 1.4.0 - no active project Usage: scrapy [options] [args] Available commands: bench Run quick benchmark test fetch Fetch a URL using the Scrapy downloader genspider Generate new spider using pre-defined templates runspider Run a self-contained spider (without creating a project) .   scrapy # prints Scrapy 1.4.0 - no active project Usage: scrapy [options] [args] Available commands: bench Run quick benchmark test fetch Fetch a URL using the Scrapy downloader genspider Generate new spider using pre-defined templates runspider Run a self-contained spider (without creating a project) . 

Scrapy

Cómo crear un rastreador web

Ahora que el entorno está listo, puede comenzar a crear rastreadores web. Eche un vistazo a la información de la página de Wikipedia sobre baterías:

 https://en.wikipedia.org/wiki/Battery_(electricity) 

El primer paso para escribir un rastreador es definir la clase Python que se extiende desde Scrapy Araña. Esto le da acceso a todas las funciones de Scrapy. Llame a esta clase araña1.

La clase de araña necesita información:

  1. Nombre ( nombre ) para identificar la araña
  2. los start_urls La variable contiene una lista de URL para rastrear (las URL de Wikipedia serán ejemplos en este tutorial)
  3. los método parse () se utiliza para procesar páginas web y extraer información.
 import scrapy class spider1(scrapy.Spider): name="Wikipedia" start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)'] def parse(self, response): pass 

Una prueba rápida para asegurarse de que todo funcione correctamente.

 scrapy araña araña1.py # impresiones 2017-11-23 09:09:21 [scrapy.utils.log] INFORMACIÓN: Scrapy 1.4.0 comenzó (bot: scrapybot) 2017-11-23 09:09:21 [scrapy.utils.log] INFO: Configuración anulada: {'SPIDER_LOADER_WARN_ONLY': True} 2017-11-23 09:09:21 [scrapy.middleware] INFO: Extensiones habilitadas: ['scrapy.extensions.memusage.MemoryUsage', 'scrapy.extensions.logstats.LogStats', 

Turn off logging

Running Scrapy with this class will export log information which will not help at the moment. Make things simple by removing this redundant log information. Add the following code to the beginning of the file.

 import logging logging.getLogger('scrapy').setLevel(logging.WARNING) 

Now when you run the script again, the log information will not be printed.

Use Chrome Inspector

Everything on a web page is stored in HTML elements. Elements are organized in the Document Object Model (DOM). Understanding the DOM is important to make the most of the web crawler. Web crawlers search through all the HTML elements on a page to find information, so it’s important to understand how they are organized.

Google Chrome has tools to help you find HTML elements faster. You can position the HTML in any element you see on the web with the inspector.

  1. Navigate to a page in Chrome
  2. Place your mouse over the element you want to see
  3. Right click and select Inspect from the menu

These steps will open the developer console with the Elements tab selected. At the bottom of the console, you will see a tree diagram containing the elements. This tree diagram is how you will get information for the script.

Extract title

Use the script to do some work. Gather simple information to get the site’s title text.

Start the script by adding some code to the parse () method to extract the title.

 . def parse(self, response): print response.css('h1#firstHeading::text').extract() . 

The response argument supports a method called CSS () that selects elements from the page using the location you provide.

In this example, the element is h1.firstHeading. Adding :: text to the script is what is needed to give you the content of the element. Finally, the extract () method returns the selected element.

Run this script in Scrapy to export the title in text form.

 [u'Battery (electricity)'] 

Encontrar descripción

Ahora hemos extraído el texto del título. Haga más con los guiones. El rastreador encontrará el primer párrafo después del título y extraerá esta información.

A continuación, se muestra un diagrama de árbol de elementos en Chrome Developer Console:

 div#mw-content-text>div>p 

La flecha derecha ( > ) indica la relación padre-hijo entre los elementos. Esta posición devolverá todas las coincidencias pag elementos, incluida la descripción completa. Para conseguir el primero pag elemento, puede escribir este código:

 response.css('div#mw-content-text>div>p')[0] 

Al igual que el título, agrega :: texto para obtener el contenido de texto del elemento.

 response.css('div#mw-content-text>div>p')[0].css('::text') 

La expresión final usa extraer () para devolver la lista. Puedes usar Python unirse () función para concatenar listas después de que se complete el rastreo.

 def parse(self, response): print ''.join(response.css('div#mw-content-text>div>p')[0].css('::text').extract()) 

¡El resultado es el primer párrafo del texto!

 An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is . 

Recopilar datos JSON

Scrapy puede extraer información en forma de texto, muy útil. Scrapy también le permite ver datos de notación de objetos JavaScript (JSON). JSON es una forma ordenada de organizar la información y se usa ampliamente en el desarrollo web. JSON también funciona bastante bien con Python.

Cuando necesite recopilar datos en formato JSON, puede utilizar el rendimiento declaración integrada en Scrapy.

Aquí, una nueva versión del script usa el rendimiento declaración . En lugar de tomar la primera pag elemento en formato de texto, esta declaración recuperará todos los pag elementos y organizarlo en formato JSON.

 . def parse(self, response): for e in response.css('div#mw-content-text>div>p'): yield { 'para' : ''.join(e.css('::text').extract()).strip() } . 

Ahora, puede ejecutar el araña especificando la salida JSON archivo:

 scrapy runspider spider3.py -o joe.json 

El script ahora generará todos pag elementos.

 [ {"para": "An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is the cathode and its negative terminal is the anode.[2] The terminal marked negative is the source of electrons that when connected to an external circuit will flow and deliver energy to an external device. When a battery is connected to an external circuit, electrolytes are able to move as ions within, allowing the chemical reactions to be completed at the separate terminals and so deliver energy to the external circuit. It is the movement of those ions within the battery which allows current to flow out of the battery to perform work.[3] Historically the term "battery" specifically referred to a device composed of multiple cells, however the usage has evolved additionally to include devices composed of a single cell.[4]"}, {"para": "Primary (single-use or "disposable") batteries are used once and discarded; the electrode materials are irreversibly changed during discharge. Common examples are the alkaline battery used for flashlights and a multitude of portable electronic devices. Secondary (rechargeable) batteries can be discharged and recharged multiple . 

Explota muchos factores

Hasta ahora, el rastreador web ha tocado el título y un tipo de elemento de la página. Scrapy también puede extraer información de diferentes tipos de elementos en un script.

No dude en extraer los principales éxitos de taquilla de IMDb del fin de semana. Esta información se toma de http://www.imdb.com/chart/boxoffice , en una tabla con filas para cada métrica.

los método parse () puede extraer varios campos de una fila. Con las herramientas para desarrolladores de Chrome, puede encontrar elementos anidados en la tabla.

 . def parse(self, response): for e in response.css('div#boxoffice>table>tbody>tr'): yield { 'title': ''.join(e.css('td.titleColumn>a::text').extract()).strip(), 'weekend': ''.join(e.css('td.ratingColumn')[0].css('::text').extract()).strip(), 'gross': ''.join(e.css('td.ratingColumn')[1].css('span.secondaryInfo::text').extract()).strip(), 'weeks': ''.join(e.css('td.weeksColumn::text').extract()).strip(), 'image': e.css('td.posterColumn img::attr(src)').extract_first(), } . 

El selector imagen identifica que img es descendiente de td.posterColumn. Para extraer el atributo correcto, use la expresión :: attr (src).

Ejecutar spider devuelve JSON:

 [ {"gross": "$93.8M", "weeks": "1", "weekend": "$93.8M", "image": "https://images-na.ssl-images-amazon.com/images/M/MV5BYWVhZjZkYTIt[email protected]._V1_UY67_CR0,0,45,67_AL_.jpg", "title": "Justice League"}, {"gross": "$27.5M", "weeks": "1", "weekend": "$27.5M", "image": "https://images-na.ssl-images-amazon.com/images/M/MV5BYjFhOWY0OTgt[email protected]._V1_UX45_CR0,0,45,67_AL_.jpg", "title": "Wonder"}, {"gross": "$247.3M", "weeks": "3", "weekend": "$21.7M", "image": "https://images-na.ssl-images-amazon.com/images/M/[email protected]_V1_UY67_CR0,0,45,67_AL_.jpg", "title": "Thor: Ragnarok"}, . ] 
Total
0
Shares
Share 0
Tweet 0
Pin it 0
Artículo anterior
  • Correo Web

Cómo eliminar automáticamente los correos electrónicos de Gmail de cualquier remitente

Ver Publicación
Siguiente artículo
  • Información

Un niño japonés de 14 años fue arrestado por crear ransomware

Ver Publicación
También podría interesarte
Ver Publicación
  • Blog

El modo de mantenimiento está activado

  • admin
  • diciembre 8, 2020
Ver Publicación
  • Blog

El secreto de WordPress para obtener ganancias

  • admin
  • noviembre 25, 2020
Ver Publicación
  • Blog

El servicio de blogs de WordPress.com colapsó debido a un ataque DoS

  • admin
  • noviembre 25, 2020
Ver Publicación
  • Blog

WordPress vuelve a funcionar después de ser atacado

  • admin
  • noviembre 25, 2020
Ver Publicación
  • Blog

¿Qué hay de nuevo en WordPress 5.4?

  • admin
  • noviembre 25, 2020
Ver Publicación
  • Blog

¿Qué es HTTPS? y por qué es necesario para su sitio

  • admin
  • noviembre 25, 2020
Ver Publicación
  • Blog

Formas de cambiar los nombres de dominio del sitio web en WordPress

  • admin
  • noviembre 25, 2020
Ver Publicación
  • Blog

Desea crear un sitio web eficaz y de bajo costo, aplique los siguientes consejos

  • admin
  • noviembre 25, 2020

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Octavodia

Ingresa las palabras de la búsqueda y presiona Enter.