Tutorial de Web Scraping con Python: Consejos y trucos

Python, Scraping, Dic-05-20215 minutos de lectura

Puede extraer automáticamente grandes cantidades de datos de sitios web mediante web scraping y guardarlos en una base de datos o un archivo. La mayoría de los datos extraídos pueden almacenarse en una hoja de cálculo o en formato tabular. El web scraping también se denomina extracción de datos web o web harvesting. Es necesario porque el scraping manual es una tarea tediosa.

Índice

Puede extraer automáticamente grandes cantidades de datos de sitios web mediante web scraping y guardarlos en una base de datos o un archivo. La mayoría de los datos extraídos pueden almacenarse en una hoja de cálculo o en formato tabular. El web scraping también se denomina extracción de datos web o web harvesting. Es necesario porque el scraping manual es una tarea tediosa que puede llevar horas o incluso días. Por lo tanto, es necesario automatizar el proceso y extraer los datos de los sitios web en una fracción de tiempo.

Puede utilizar el software de web scraping para cargar, rastrear y extraer automáticamente datos de las múltiples páginas de un sitio web en función de sus necesidades y requisitos. En resumen, puede obtener los datos que desee de sitios web con sólo pulsar un botón. En el mundo moderno, las empresas necesitan analizar los datos y realizar acciones inteligentes. Pero a veces, obtener datos de sitios web es difícil cuando los propietarios de los sitios web emplean técnicas como las prohibiciones de IP y los CAPTCHA. Puedes utilizar servidores proxy o VPN para superar este problema, ya que te ayudan a extraer datos de la web de forma anónima. 

¿Por qué es necesario el Web Scraping?

Empresas de todo el mundo extraen datos de la web para obtener información útil almacenándola en un formato utilizable. A continuación se exponen algunas de las ventajas del web scraping en diversos sectores.

  • El scraping web recopila conjuntos de datos de entrenamiento y prueba para proyectos de aprendizaje automático.
  • En el comercio electrónico, el web scraping se utiliza para controlar los precios de la competencia.
  • El web scraping se utiliza en el sector inmobiliario para obtener datos sobre propiedades y propietarios/agentes.
  • En marketing, el web scraping se utiliza para crear listas de teléfonos y correos electrónicos para la captación en frío.

A continuación se exponen las principales razones para raspar datos de la web.

Lograr la automatización - Puede extraer datos de sitios web utilizando robustos raspadores web. De esta manera, puede ahorrar tiempo de las tareas mundanas de recopilación de datos. Puede recopilar un volumen de datos superior al que un solo ser humano podría alcanzar con el web scraping. Además, también puede crear sofisticados robots web para automatizar las actividades en línea, ya sea utilizando un lenguaje de programación como Python, Javascript o utilizando una herramienta de web scraping.

Conjuntos de datos ricos y únicos - Puede obtener una gran cantidad de imágenes, vídeos, texto y datos numéricos de Internet. También puede encontrar sitios web relevantes y crear su propio conjunto de datos personalizado para el análisis, en función de su objetivo. Por ejemplo, le interesa conocer en profundidad el mercado deportivo del Reino Unido. Puede configurar los raspadores web para que recopilen por usted el contenido de los vídeos o la información estadística del fútbol.

Gestión eficaz de datos - No es necesario copiar y pegar datos de Internet, ya que puede recopilar datos con precisión de varios sitios web con el raspado web. De este modo, su empresa y sus empleados pueden dedicar más tiempo al trabajo creativo almacenando los datos de forma eficaz con software y programas automáticos.

Business Intelligence and Insights - El Web scraping de Internet le permite hacer lo siguiente:

  • Seguimiento de la actividad comercial de la competencia
  • Búsqueda de precios de la competencia
  • Construir una imagen más amplia de su mercado

Además, las empresas pueden tomar mejores decisiones descargando, limpiando y analizando datos en un volumen considerable.

Velocidad - El Web scraping extrae datos de sitios web a gran velocidad. Permite raspar datos en horas en lugar de días. Pero algunos proyectos pueden llevar tiempo en función de su complejidad y de los recursos y herramientas que utilicemos para llevarlos a cabo.

Precisión de los datos - La extracción manual de datos de sitios web implica errores humanos, lo que conlleva graves problemas. Por lo tanto, la extracción precisa de datos es crucial para cualquier información, lo que puede lograrse con el web scraping.

Web Scraping En Python

Supongamos que tienes que extraer datos de este sitio web. Tendrás que instalar los dos módulos de Python requests y BeautifulSoup. 

Bibliotecas de importación

Puede instalar estos módulos mediante el siguiente comando.

pip install peticiones
pip install BeautifulSoup

Puede importar estos módulos como:

from bs4 import BeautifulSoup
importar peticiones

Puede hacer clic en el botón Inspeccionar situado en la esquina superior izquierda de la página web para resaltar los elementos que desea extraer. En nuestro caso, queremos extraer los datos de la tabla de este sitio como se muestra a continuación.

Añadir cabecera y URL

Tienes que añadir la cabecera y la URL a tus peticiones. La cabecera puede despegar su solicitud para que parezca que proviene de un navegador legítimo. 

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'}

url = "https://en.wikipedia.org/wiki/List_of_national_capitals"

Puede utilizar la función requests.get() para enviar una solicitud GET a la URL especificada.

r = requests.get(url, headers=cabeceras)

Objeto BeautifulSoup

Tienes que inicializar un objeto BeautifulSoup y mencionar sus parámetros. Luego, tienes que extraer todas las filas de la tabla. Puedes obtener todos los elementos de la tabla utilizando el método find_all() como se muestra en el siguiente código.

soup = BeautifulSoup(r.content, "html.parser")
tabla = soup.find_all('tabla')[1]
filas = tabla.find_all('tr')
lista_filas = lista()

Iteración por filas

Puede utilizar un bucle for para recorrer todas las filas de la tabla, como se muestra en el código siguiente.

para tr en filas:
   td = tr.find_all('td')
    fila = [i.texto para i en td]
    row_list.append(fila)

Crear un marco de datos

Puede visualizar los datos extraídos claramente si crea un marco de datos Pandas y exporta sus datos a un fichero .csv. Para crear un marco de datos, tiene que importar Pandas, como se muestra a continuación.

importar pandas como pd

Ahora, puede convertir su objeto sopa en un marco de datos que contendrá las siguientes filas de tabla.

  • Ciudad
  • País
  • Notas

Puede convertir su marco de datos a formato csv e imprimirlo como se muestra a continuación.

df_bs = pd.DataFrame(lista_filas,columnas=['Ciudad','País','Notas'])
df_bs.set_index('País',inplace=True)
df_bs.to_csv('beautifulsoup.csv')
imprimir(df_bs)

Obtendrá el siguiente resultado.

Proxies para Web Scraping usando Python

Un proxy actúa como intermediario entre un cliente y un servidor. Oculta tu dirección IP real y evita los filtros y la censura. Puedes obtener una lista gratuita de proxies simplemente utilizando una función en Python, como se muestra en los pasos siguientes.

Bibliotecas de importación

Tienes que importar los siguientes módulos en Python.

from bs4 import BeautifulSoup
importar peticiones
import aleatorio

Definir una función

Puedes definir una función get_free_proxies() en la que tienes que mencionar la URL de la lista de proxies gratuitos. A continuación, tienes que crear un objeto BeautifulSoup y obtener la respuesta HTTP mediante la función requests.get(). 

def get_free_proxies():
    url = "https://free-proxy-list.net/"
    soup = bs(requests.get(url).content, "html.parser")
    proxies = []

Utilizar un bucle For

Puede utilizar el método find_all() en el bucle for para iterar a través de todas las filas de la tabla como se muestra a continuación.

for row in soup.find("table", attrs={"id": "proxylisttable"}).find_all("tr")[1:]:
        tds = row.find_all("td")
        try:
            ip = tds[0].text.strip()
            port = tds[1].text.strip()
            host = f"{ip}:{port}"
            proxies.append(host)
        except IndexError:
            continue
    return proxies

Lista de apoderados que trabajan

Puedes mencionar la lista de algunos proxies que funcionan como el que mencionamos a continuación.

proxies = [
    '167.172.248.53:3128',
   '194.226.34.132:5555',
   '203.202.245.62:80',
    '141.0.70.211:8080',
    '118.69.50.155:80',
    '201.55.164.177:3128',
   '51.15.166.107:3128',
   '91.205.218.64:80',
    '128.199.237.57:8080',
]

Solicitar sesión

Tienes que crear una función get_session() que acepte una lista de proxies. También crea una sesión de peticiones que selecciona aleatoriamente cualquiera de los proxies pasados como se muestra en el código de abajo.

def get_session(proxies):
  session = requests.Session()
  proxy = random.choice(proxies)
  session.proxies = {"http": proxy, "https": proxy}
  return session

Hacer una solicitud

Puedes utilizar un bucle for para hacer una petición a un sitio web y obtener a cambio una dirección IP.

para i en rango(5):
    s = get_session(proxies)
    probar:
       print("Solicitar página con IP:", s.get("http://icanhazip.com", timeout=1.5).text.strip())
    excepto Exception como e:
        continue

Puede obtener el siguiente resultado.

¿Por qué son importantes los proxies para el Web Scraping?

Las empresas pueden extraer datos valiosos para tomar decisiones basadas en datos y ofrecer servicios impulsados por datos con el raspado web. Los proxies son importantes para el web scraping por las siguientes razones.

  • Con los proxies, puede realizar solicitudes desde una región geográfica concreta y ver el contenido específico que muestra el sitio web para esa ubicación determinada. Esta característica de los proxies es beneficiosa cuando se extraen datos de productos de minoristas en línea.
  • Los proxies le permiten realizar un mayor volumen de peticiones a un sitio web objetivo sin ser bloqueado o vetado.
  • Los proxies permiten rastrear datos de sitios web de forma más fiable y eficaz.
  • Con los proxies, puedes realizar sesiones simultáneas ilimitadas en el mismo sitio web o en otros diferentes sin temor a que te lo prohíban.
  • Un proxy oculta la dirección IP de su máquina al sitio web de destino, proporcionando así seguridad adicional a su dispositivo.
  • Las empresas utilizan los proxies para controlar los precios y las características de los productos de la competencia con el fin de mejorar sus servicios y productos.

Conclusión sobre este tutorial de Python para Web Scraping

Hasta ahora, hemos comentado que el web scraping nos ayuda a extraer datos de sitios web de forma automatizada. Puede convertir los datos en un formato utilizable como un archivo .csv. Las empresas utilizan el web scraping para comprobar los precios y las características de los productos de la competencia. El web scraping es de gran utilidad si utiliza proxies, ya que mantienen su identidad en el anonimato al ocultar su dirección IP original del sitio web de destino. Con los proxies, puede enviar varias solicitudes al sitio web sin temor a que le bloqueen o prohíban el acceso.