Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Web Scraping Python + BeautifulSoup

Web Scraping Python + BeautifulSoup

Que es Web Scraping
Como utilizarla con Python y BeautifulSoup
Que es el ROBOTS.TXT

Valery Briz

August 27, 2017
Tweet

More Decks by Valery Briz

Other Decks in Programming

Transcript

  1. El termino se utiliza ya que para obtener la información

    no lo hacemos por medio de un servicio restful o descargando algo de la página sino escudriñando en la información publica que nos dan, "escarbando" el sitio web para obtener lo que alli se presenta.
  2. • Marketing de contenidos • Visibilidad en Redes Sociales •

    Visibilidad de Marca en Internet • Big Data
  3. Algo que hay que tomar en cuenta es que hacer

    scraping de una página web puede desacatar sus terminos de servicio. Por lo que es importante asegurarse de que ese no es el caso, por ejemplo Twitter prohibe completamente hacer scraping en su página. Los dueños de sitios web pueden usar un archivo /robots.txt para darle instrucciones a los bots acerca de su sitio web; este es llamado The Robots Exclusion Protocol.
  4. Si un robot quiere visitar el sitio Web http://www.ejemplo.com/index.html Antes

    de eso revisa el http://www.ejemplo.com/robots.txt, y encuentra algo como esto: El "User-agent: *" significa que esta sección aplica a todos los robots. El "Disallow: /" le indica al robot que no esta permitido obtener información de ningúna de las páginas de este sitio. User-agent: * Disallow: /
  5. Hay que tomar en cuenta que los robots podrían ignorar

    el /robots.txt especialmente si son robots de malware que buscan vulnerabilidades en la seguridad. A demás de ello hay que estar consientes de que el /robots.txt es público, por lo que cualquiera podría ver que es lo que no quieres mostrar. Por lo que el /robots.txt no sirve para ocultar información.
  6. Podemos encontrar información de algunos Robots registrados en el siguiente

    link: http://www.robotstxt.org/db.html En el /robots.txt podemos establecer que permisos le damos a estos robots, por nombre o bien bloquearlos. Sin embargo el robot podría ignorar esto.
  7. Imagina una vida sin Google, o sin Bing que según

    la información que ronda en internet, hace scraping a Google para obtener algunos de sus datos.
  8. Podemos diseñar un robot que haga un scraping de datos

    concretos de una web y los podamos utilizar para generar nuestro propio contenido.
  9. Podemos utilizar los datos de un scraping para interactuar a

    través de un robot con usuarios en redes sociales. Por ejemplo: crear un bot en instagram que seleccione los links de cada foto y luego programar un comentario en cada entrada.
  10. A través del scraping podemos automatizar la posición por la

    que varios artículos de nuestra web se posicionan en Google o, por ejemplo, controlar la presencia del nombre de nuestra marca en determinados foros.
  11. A veces es necesario obtener una gran cantidad de datos

    desde una o varias páginas sin embargo hacerlo manualmente es bastante complicado.
  12. 1. <!DOCTYPE html>: Los documentos HTML deben iniciar con una

    declaración de tipo. 2. El documento HTML esta contenido en <html> and </html>. 3. El meta y los scripts estan contenidos entre <head> y </head>. 4. La parte Visible esta contenida entre <body> y </body>. 5. Los titulos se definen con tags <h1> hasta <h6>. 6. Los parrafos tienen tag <p>. De ello obtendremos algo como lo siguiente: <div class="tituloPost"> <div class="autor">.
  13. # importar las librerias import requests from bs4 import BeautifulSoup

    # especificar el URL URL = ‘http://jarroba.com/' # Realizamos la petición a la web req = requests.get(URL)
  14. #Comprobamos que la petición #nos devuelve un Status Code =

    200 status_code = req.status_code if status_code == 200: # Pasamos el contenido HTML de la web a un #objeto BeautifulSoup() html = BeautifulSoup(req.text, "html.parser")
  15. # Obtenemos todos los divs donde están las entradas #entradas

    = html.find_all('div', {'class': 'col-md-4 col-xs-12'}) # Recorremos todas las entradas para extraer #el título, autor y fecha for item, entrada in enumerate(entradas):
  16. # Con el método "getText()" no nos devuelve el HTML

    titulo = entrada.find('span', {'class': 'tituloPost'}).getText() autor = entrada.find('span', {'class': 'autor'}) fecha = entrada.find('span', {'class': 'fecha'}).getText() # Imprimo el Título, Autor y Fecha de las entradas print "%d - %s | %s | %s" % (i + 1, titulo, autor, fecha) else: print "Status Code %d" % status_code
  17. El resultado de http://jarroba.com/ sería algo como lo siguiente: 1

    - Sistema de numeración binario | <span class="autor">Por: Ramón Invarato</span> | 28-Jul-2017 2 - venv (entornos virtuales) en python | <span class="autor">Por: Dionisio Cortes</span> | 25-Jun-2017 3 - Como construir el JDK de Java 9 | <span class="autor">Por: Dionisio Cortes</span> | 03-Jun-2017 4 - Patrón Singleton en Python, con ejemplos | <span class="autor">Por: Dionisio Cortes</span> | 18- May-2017 5 - Inferencia tipos Java: El operador diamante | <span class="autor">Por: Dionisio Cortes</span> | 06- May-2017 6 - Gson (JSON) en Java, con ejemplos | <span class="autor">Por: Ricardo Moya</span> | 02-May-2017 7 - Unidades de medida de la información | <span class="autor">Por: Ramón Invarato</span> | 01-May- 2017 8 - 6 formas de mejorar el rendimiento en python | <span class="autor">Por: Dionisio Cortes</span> | 25- Abr-2017 9 - Scraping anónimo por la red TOR | <span class="autor">Por: Ricardo Moya</span> | 12-Abr-2017