Scrapy es una herramienta de código abierto construida con Python Framework. Nos presenta un marco de rastreo web fuerte y robusto que puede extraer fácilmente la información de la página en línea con la ayuda de selectores compatibles con XPath.
Podemos definir el comportamiento de los componentes de Scrapy con la ayuda de la configuración de Scrapy. Las canalizaciones y los archivos de configuración son muy importantes para scrapy. Es el núcleo de la automatización de la tarea. Estas reglas ayudan a insertar datos en la base de datos. Estos archivos se incluyen cuando comenzamos con la plantilla base. La configuración de Scrapy le permite personalizar el comportamiento de todos los componentes de Scrapy, incluido el núcleo, las extensiones, las canalizaciones y las propias arañas.
A menudo se nos presenta la situación en la que necesitamos definir múltiples proyectos crapper, en ese caso podemos definir qué proyecto individual con la ayuda de configuraciones scrapy. Para esto, se debe usar la variable de entorno SCRAPY_SETTINGS_MODULE y su valor debe estar en la sintaxis de ruta de Python. Por lo tanto, con la ayuda de la configuración de Scrapy, se podría especificar el mecanismo para elegir el proyecto de Scrapy actualmente activo.
La infraestructura de la configuración proporciona un espacio de nombres mundial de asignaciones de valores clave que el código puede usar para extraer valores de configuración. Las configuraciones a menudo se completan a través de diferentes mecanismos, que se describen a continuación.
Use estos comandos para iniciar la carpeta de plantillas scrapy.
scrapy startproject <project_name>
Este es el esquema base del proyecto scrapy.
Con este artículo, nos centraríamos en el archivo settings.py.
El archivo settings.py se parece a esto. Se nos proporciona esto como nuestra configuración predeterminada.
Los ajustes más utilizados y su descripción se dan a continuación:
Configuraciones importantes de Scrapy
- BOT_NOMBRE
Es el nombre del proyecto. El bot simboliza la automatización que estamos haciendo con la ayuda del scrapper. Por defecto es ‘scrapybot’. También, como se ve en la captura de pantalla, está disponible automáticamente con el nombre de su proyecto cuando inicia el proyecto.
- AGENTE DE USUARIO
User-Agent nos ayuda con la identificación. Básicamente les dice «quién eres» a los servidores y compañeros de red. Ayuda con la identificación de la aplicación, el sistema operativo, el proveedor y/o la versión del agente de usuario solicitante. El valor predeterminado es «Scrapy/VERSION (+https://scrapy.org)» durante el rastreo, a menos que se especifique explícitamente.
El formato común para los navegadores:
User-Agent: <browser>/<version> (<system-info>) <platform> (<platform-details>) <extensions>
Por ejemplo:
# Crawl responsibly by identifying yourself (and your website) on the user-agent USER_AGENT = 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'
- ROBOTSTXT_OBEY
Un archivo robots.txt básicamente le dice a los rastreadores de los motores de búsqueda qué páginas podría solicitar del sitio. ROBOTSTXT_OBEY por defecto es «Falso». En su mayoría, se mantiene habilitado, por lo que nuestro scrapy respetará las políticas de robots.txt del sitio web.
La imagen muestra el contenido del archivo robots.txt, las políticas escritas aquí son administradas por la configuración ROBOTSTXT_OBEY.
- SOLICITUDES_CONCURRENTES
Básicamente es pedirle al sitio web que se abra. El valor predeterminado es 16. Básicamente, es el número máximo de requests que realizará el rastreador.
Más requests aumentan la carga del servidor, por lo que mantenerlo en un valor tan bajo como 16 o 32 es un buen valor.
- CONCURRENT_ITEMS
Significa, al eliminar los datos, qué cantidad máxima de elementos simultáneos procesará el scrapy en paralelo por respuesta. El valor predeterminado es 100, que nuevamente es un buen valor.
custom_settings = { 'CONCURRENT_REQUESTS' = 30, 'CONCURRENT_ITEMS' = 80, }
- CONCURRENT_REQUESTS_PER_DOMAIN
Significa que, al desechar los datos, cuál es el número máximo de requests existentes que se pueden realizar simultáneamente para cualquier valor de dominio único. El valor predeterminado es ‘8’.
- CONCURRENT_REQUESTS_PER_IP
Significa que al desechar los datos, ¿cuál es la cantidad máxima de requests existentes que se pueden realizar simultáneamente para cualquier dirección IP única? Por defecto es el valor ‘0’.
custom_settings = { 'CONCURRENT_REQUESTS_PER_DOMAIN' = 8, 'CONCURRENT_REQUESTS_PER_IP' = 2 }
- DESCARGAR_DELAY
Es la demora en la cantidad de tiempo que tardaría el descargador antes de volver a descargar las páginas del sitio web. Esto nuevamente se usa para limitar la carga en el servidor donde está alojado el sitio web. Por defecto es 0.
Por ejemplo:
DOWNLOAD_DELAY = 0.25 # 250 ms of delay
- DESCARGAR_TIEMPO DE ESPERA
Es el tiempo de espera. Le dice a scrapy que espere la cantidad de tiempo dada antes de que se agote el tiempo de descarga. El valor predeterminado es 180.
- LOG_ENABLED
Se utiliza para habilitar o deshabilitar el registro para el scrapper. Por defecto es «Verdadero».
- CONTRASEÑA_FTP
Se utiliza para establecer una contraseña para las conexiones FTP. El valor se usa solo cuando no hay «ftp_password» en Request meta. Por defecto es «invitado».
- USUARIO_FTP
Se utiliza para establecer un nombre de usuario para las conexiones FTP. El valor se usa solo cuando no hay «ftp_user» en Request meta. Por defecto es «anónimo».
- DEFAULT_ITEM_CLASS
Esta configuración se usa para representar elementos dentro de un scrapy, los valores se almacenan en este formato de clase especificado por DEFAULT_ITEM_CLASS. El formato predeterminado viene dado por ‘scrapy.item.Item’.
- DEFAULT_REQUEST_HEADERS
La configuración dada enumera el encabezado predeterminado utilizado para las requests HTTP realizadas por Scrapy. Se rellena dentro de DefaultHeadersMiddleware.
El valor del encabezado predeterminado viene dado por:
{ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en', }
- REACTOR_THREADPOOL_MAXSIZE
El conjunto de subprocesos del reactor también podría establecerse dentro del scrapy. Vincula el tamaño máximo para el conjunto de subprocesos del reactor de la araña. Su tamaño predeterminado es 10.
Por ejemplo, la configuración podría aplicarse dentro del código como el siguiente código de Python:
class exampleSpider(scrapy.Spider): name = 'example' custom_settings = { 'CONCURRENT_REQUESTS': 25, 'CONCURRENT_REQUESTS_PER_DOMAIN': 100, 'DOWNLOAD_DELAY': 0 } f = open("example") start_urls = [url.strip() for url in f.readlines()] f.close() def parse(self, response): for itemin response.xpath("//div[@class=<class_component>]"): urlgem = item.xpath(".//div[@class=<class_component>]/a/@href").extract()
- AWS_ACCESS_KEY_ID
Con esto, puede configurar la ID de AWS dentro de su scrapy, se usa para acceder a los servicios web de Amazon. El valor predeterminado es «Ninguno».
- AWS_SECRET_ACCESS_KEY
Con esto, puede configurar la clave de acceso de AWS (contraseña o credencial de identificación) dentro de su scrapy, se utiliza para acceder a los servicios web de Amazon. El valor predeterminado es «Ninguno».
- DEPTH_LIMIT
La profundidad límite para que la araña rastree un sitio de destino. Por defecto es 0.
- PROFUNDIDAD_PRIORIDAD
Además, administra la prioridad de la profundidad para rastrear un sitio de destino. También por defecto es 0.
Este es un diseño básico del gráfico selector dentro de Scrapy. Los componentes podrían construirse dentro de este gráfico selector. Cada componente es responsable de desechar elementos individuales del sitio.
- DEPTH_STATS
Con esta configuración, también podemos recopilar las estadísticas de profundidad dentro de los registros del nivel rastreado. Si la configuración está habilitada, el valor de cada solicitud individual para cada profundidad se recopila en las estadísticas. Su valor predeterminado es «Verdadero».
- DEPTH_STATS_VERBOSE
Mejora aún más DEPTH_STATS al habilitar la cantidad de requests que se recopilan en estadísticas para cada profundidad detallada.
Por defecto, es «Falso».
Los niveles del selector pueden extenderse hasta una profundidad infinita según lo estructurado por el webmaster. Con las diversas configuraciones de profundidad, es nuestro deber limitar el gráfico selector dentro de nuestro rastreador.
- DNSCACHE_ENABLED
Con esta configuración, podríamos habilitar DNS dentro de un caché de memoria. Por defecto, es «Verdadero».
- DNSCACHE_SIZE
Con esta configuración, podríamos definir el tamaño del caché en memoria de DNS. Su valor por defecto es 10000.
- DNS_TIMEOUT
Es el tiempo de espera para que el DNS procese la consulta scrapy. El valor predeterminado es 60.
- DESCARGADOR
El descargador real utilizado por el rastreador. El formato predeterminado viene dado por ‘scrapy.core.downloader.Downloader’.
- DOWNLOADER_MIDDLEWARES
El diccionario contiene la descarga de middleware y sus órdenes. Está vacío por defecto.
- EXTENSIONES_BASE
El diccionario con un valor de extensión integrado. Está predeterminado por el valor: { ‘scrapy.extensions.corestats.CoreStats’: 0, }
- FEED_TEMPDIR
Este es un directorio que se utiliza para configurar la carpeta personalizada que almacena los archivos temporales del rastreador.
- ITEM_PIPELINES
Podemos definir el diccionario scrapy como si tuviera canalizaciones, esto representa las canalizaciones que se unen a cada clase de elemento. Por defecto es el valor nulo.
- LOG_STDOUT
Con esta configuración, si se establece en verdadero, toda la salida del proceso concurrente aparecerá en el archivo de registro. Su valor predeterminado es Falso.
Configurando los valores
Es recomendable poner estos valores manualmente dentro del archivo settings.py. Aún así, también hay una opción para modificar estos valores usando la línea de comando.
Por ejemplo:
Si desea generar un archivo de registro scrapy, use el siguiente comando.
scrapy crawl myspider -s LOG_FILE=scrapy.log
Conclusión: Este es el archivo más importante del scrapy. Solo con este archivo, puede personalizar el comportamiento de todos los componentes de Scrapy.