Introducción
Scrapy es un marco de rastreo web de código abierto escrito en Python. Creado originalmente para web scraping, también se puede utilizar para extraer datos utilizando API o como un rastreador web de propósito general.
Scrapy funciona en Python 3.5 o posterior con CPython (implementación predeterminada de Python) y PyPy (comenzando con PyPy 5.9).
En esta guía, le mostraremos cómo crear y ejecutar una araña web con Scrapy en su servidor Ubuntu 20.04 LTS Focal Fossa para extraer información de las páginas web mediante el uso de diferentes técnicas.
Si desea instalar Scrapy en un servidor remoto, continúe leyendo; de lo contrario, omita el primer párrafo "Conectando al servidor" y lea el siguiente.
Conexión al servidor
Para acceder al servidor, necesita conocer la dirección IP. También necesitará su nombre de usuario y contraseña para la autenticación. Para conectarse al servidor como root, escriba el siguiente comando:
ssh root@IP_DEL_SERVER
A continuación, deberá ingresar la contraseña del usuario root.
Si no usa el usuario raíz, puede iniciar sesión con otro nombre de usuario usando el mismo comando, luego cambie la raíz a su nombre de usuario:
ssh nome_utente@IP_DEL_SERVER
Luego se le pedirá que ingrese su contraseña de usuario.
El puerto estándar para conectarse a través de ssh es 22, si su servidor usa un puerto diferente, deberá especificarlo usando el parámetro -p, luego escriba el siguiente comando:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Utilice un entorno virtual (recomendado)
Recomendamos instalar Scrapy dentro de un entorno virtual en todas las plataformas.
Los paquetes de Python se pueden instalar globalmente (es decir, en todo el sistema) o en el espacio de usuario. No se recomienda instalar el sistema Scrapy al ras.
En su lugar, le recomendamos que instale Scrapy en un entorno virtual. Los entornos virtuales le permiten no entrar en conflicto con los paquetes del sistema Python ya instalados (que podrían romper algunas de las herramientas y scripts del sistema) y aún así instalar paquetes normalmente con pip
(sin sudo
y similares).
Para obtener más información, lea: Entornos y paquetes virtuales.
Instalar Scrapy en Ubuntu
Scrapy se prueba actualmente con versiones bastante recientes de lxml, twisted y pyOpenSSL y es compatible con distribuciones recientes de Ubuntu. Pero también debería admitir versiones anteriores de Ubuntu, como Ubuntu 14.04, aunque con posibles problemas con las conexiones TLS.
python-scrapy
Para instalar Scrapy en sistemas Ubuntu (o basados en Ubuntu), necesita instalar estas dependencias:
sudo apt-get install python3 python3-dev python3-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
- Los
python3-dev
,zlib1g-dev
,libxml2-dev
ylibxslt1-dev
son necesarios paralxml
. - Los
libssl-dev
ylibffi-dev
son necesarios para lacryptography
.
pippip3pythonpython3
pip3 install scrapy
Instalar Scrapy con conda
Si está utilizando Anaconda o Miniconda, puede instalar el paquete desde el canal conda-forge, que tiene paquetes actualizados para Linux, Windows y macOS.
conda install -c conda-forge scrapy
Alternativamente, si ya está familiarizado con la instalación de paquetes de Python, puede instalar Scrapy y sus dependencias de PyPI con:
pip3 install Scrapy
pippip3pythonpython3
Crea un nuevo proyecto con Scrapy
Veamos cómo usar Scrapy, comencemos creando un nuevo proyecto con el siguiente comando de terminal:
sudo scrapy startproject esempio
Ingrese la carpeta recién creada con el comando cd:
cd esempio
El directorio del proyecto recién creado tendrá la siguiente estructura:
esempio/scrapy.cfg # file di configurazione per il deploy
esempio/# module del progetto Python
__init__.py
items.py
middlewares.py
pipelines.py
settings.py # Impostazioni del progetto
spiders/__init__.py
Utilice Scrapy
Scrapy te permite descargar el contenido HTML de las páginas web y extraer información de ellas mediante el uso de diferentes técnicas, como los selectores CSS. Para facilitar este proceso, Scrapy proporciona un "shell" para probar la extrapolación de información en tiempo real.
Veamos un ejemplo rápido de cómo ver el último artículo de reddit.com:
sudo scrapy shell "reddit.com"
Debería recibir un resultado similar al siguiente:
...
[s] Available Scrapy objects:
[s] scrapy scrapy module (contains scrapy.Request, scrapy.Selector, etc)
[s] crawler <scrapy.crawler.Crawler object at 0x7fd0494600a0>
[s] item {}
[s] request <GET http://reddit.com>
[s] response <200 https://www.reddit.com/>
[s] settings <scrapy.settings.Settings object at 0x7fd04945dd30>
[s] spider <DefaultSpider 'default' at 0x7fd048fc91f0>
[s] Useful shortcuts:
[s] fetch(url[, redirect=True]) Fetch URL and update local objects (by default, redirects are followed)
[s] fetch(req) Fetch a scrapy.Request and update local objects
[s] shelp() Shell help (print this help)
[s] view(response) View response in a browser
>>>
Para obtener el título de la primera publicación puedes usar el article h3::text
selector de texto:
response.css('article h3::text')[0].get()
Debería mostrar el título del último artículo de reddit. Luego salga del shell con el siguiente comando:
exit()
Conclusión
En este tutorial, hemos visto cómo instalar y usar el marco de rastreo web Scrapy en Ubuntu 20.04 LTS Focal Fossa.