Herramientas de usuario

Herramientas del sitio


informatica:programacion:python:web_scraping

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
informatica:programacion:python:web_scraping [2021/05/22 11:38] – [XPath] tempwininformatica:programacion:python:web_scraping [2022/01/15 16:26] (actual) – [Recursos] tempwin
Línea 21: Línea 21:
  
   * [[http://xpather.com/|XPath online real-time tester and generator for XML & HTML]]   * [[http://xpather.com/|XPath online real-time tester and generator for XML & HTML]]
 +  * [[https://devhints.io/xpath|Xpath cheatsheet]]
  
 Buscar en cualquier parte del documento: Buscar en cualquier parte del documento:
Línea 41: Línea 42:
  
 Con la expresión anterior estaríamos buscando etiquetas ''h1'' por el atributo ''class'' con el valor ''title''. Con la expresión anterior estaríamos buscando etiquetas ''h1'' por el atributo ''class'' con el valor ''title''.
 +
 +Podemos usar operadores lógicos para añadir expresiones:
 +
 +<code xpath>
 +//h1[@class="title" or @class="subtitle"]
 +</code>
 +
 +Una vez encontremos un elemento de partida, podemos hacer búsquedas dentro de él añadiéndolo a la expresión:
 +
 +<code xpath>
 +//div[@class="container container-uno"]//li
 +</code>
 +
 +En los predicados podemos indicar la posición de los elementos que queremos buscar:
 +
 +<code xpath>
 +//div[@class="container container-uno"]//li[1]
 +</code>
 +
 +Solo nos quedaríamos con el primer ''li''
 +
 +Si solo nos queremos quedar con el texto que contiene cierto elemento:
 +
 +<code xpath>
 +//h1[contains(text(), "This is")]/text()
 +</code>
 +
 +Si solo queremos obtener el valor de un atributo:
 +
 +<code xpath>
 +//h1[contains(text(), "This is")]/@class
 +</code>
 +
 +<WRAP center round tip 60%>
 +En los navegadores Google Chrome y Mozilla Firefox se pueden probar expresiones XPath desde la consola de las herramientas de desarrolladores introduciendo las expresiones en ''$x()'': ''$x(%%"//h2[1]"%%)''
 +</WRAP>
 +
 +==== Funciones ====
 +
 +  * ''position''
 +  * ''contains''
 +  * ''starts-with''
 +  * ''not''
 +  * ''text''
 +
 +<code xpath>
 +//div[@class="container container-uno"]//li[starts-with(@id, "elem")]
 +</code>
 +
 +Obtiene todos los ''li'' cuyo atributo ''id'' comience por ''elem''.
 +
 +Si queremos buscar por un texto:
 +
 +<code xpath>
 +//h1[contains(text(), "Hola, mundo")]
 +</code>
 +
 +Nos buscará todos los elementos ''h1'' que contengan el texto ''Hola, mundo''.
 +
 ===== Descargar ficheros ===== ===== Descargar ficheros =====
  
Línea 50: Línea 110:
 import requests import requests
  
-res requests.get("https://example.org/fichero")+# Con la petición vamos a personalizar la cabecera HTTP para 
 +# que el servidor "crea" que estamos utilizando un navegador web 
 +headers 
 +    "user-agent": "Mozilla/5.(X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36" 
 +
 + 
 +url = "https://example.org/page" 
 + 
 +res = requests.get(url, headers=headers)
  
 # 'res' es el objeto con la respuesta # 'res' es el objeto con la respuesta
Línea 60: Línea 128:
 # 200 -> Si ha ido bien # 200 -> Si ha ido bien
  
-El contenido de la descarga está en:+El contenido de la descarga está en:
 res.text res.text
 </code> </code>
  
 ===== Procesar HTML ===== ===== Procesar HTML =====
 +
 +Tenemos dos posibilidades interesantes con los siguientes módulos de Python:
 +
 +  * [[https://lxml.de/|lxml]]
 +  * [[https://www.crummy.com/software/BeautifulSoup/|Beautiful Soup]]
 +
 +Hay una tercera posibilidad que es **Scrapy**, que es ya todo un framework para navegar por páginas, extraer información y moverse por las diferentes páginas de un mismo sitio.
 +
 +La ventaja de Beautiful Soup frente a lxml es poder movernos por elementos sin conocer su id o clase, solo con tener un punto de partida. Ejemplos de esto es el método ''find_next_sibling()''
  
 Es necesario instalar BeautifulSoup: ''pip install beautifulsoup4'' Es necesario instalar BeautifulSoup: ''pip install beautifulsoup4''
Línea 186: Línea 263:
  
   * [[https://towardsdatascience.com/everything-you-need-to-know-about-web-scraping-6541b241f27e|Everything you Need to Know About Web Scraping]]   * [[https://towardsdatascience.com/everything-you-need-to-know-about-web-scraping-6541b241f27e|Everything you Need to Know About Web Scraping]]
 +  * [[https://automatetheboringstuff.com/2e/chapter12/|Automate the Boring Stuff with Python: WEB SCRAPING]]
 +  * [[https://toscrape.com/|Web Scraping Sandbox]]
informatica/programacion/python/web_scraping.1621676307.txt.gz · Última modificación: por tempwin