¿Qué es el rastreo web?
El web scraping implica la recopilación de datos disponibles en el sitio web. Esto puede ser realizado manualmente por humanos o por robots. Este es un proceso de extracción de información y datos de un sitio web y convertir la información obtenida en datos estructurados para su posterior análisis. El web scraping también se denomina recopilación web o extracción de datos web.
Se requiere rastreo web
El web scraping ayuda a obtener datos para el análisis de tendencias, rendimiento y seguimiento de precios. Se puede utilizar para el análisis de la opinión del consumidor para obtener información sobre artículos de noticias, agregación de datos de mercado, análisis predictivo y muchos proyectos de procesamiento de lenguaje natural. Se utilizan varias bibliotecas de Python en web scraping, que incluyen:
- Patrón
- Scrapy
- Hermosa sopa
- Solicitudes, Merchandize, Selenio, etc.
Scrapy es un marco completo de craping web escrito en Python, responsable de descargar HTML para su análisis. Sin embargo, Beautiful Soup es una biblioteca para analizar y extraer datos de HTML.
Pasos involucrados en el web scraping
- Carga / descarga de documentos: carga toda la página HTML
- Analizar y extraer: interpretar el documento y recopilar información del documento
- Conversión: convierte los datos recopilados.
Para descargar , use la biblioteca de solicitudes de Python para descargar la página html. Scrapy tiene su método de solicitud incorporado.
Aunque es necesario estar familiarizado con el lenguaje de marcado de hipertexto (HTML) al analizar documentos. HTML es el lenguaje de marcado estándar que se utiliza para crear páginas web. Consiste en una serie de elementos / nombres de etiquetas que le dicen al navegador cómo mostrar el contenido. Los elementos HTML se componen de
<etiqueta de inicio> Contenido aquí </ etiqueta de fin>
HTML se puede expresar como una estructura de árbol que contiene nombres / nodos de etiquetas, donde hay relaciones entre nodos, incluidos padres, hijos, hermanos, etc.
Después de la descarga, use el selector CSS o el localizador XPATH para extraer datos de la fuente HTML
XPath se define como una ruta XML. Es la gramática o el lenguaje para encontrar cualquier elemento en una página web usando expresiones de ruta XML. XPath se usa para encontrar la posición de cualquier elemento en una página web usando la estructura HTML DOM.
Empezando con el localizador XPATH
Absolute Xpath : Contiene la ruta completa desde el elemento raíz hasta el elemento deseado.
Xpath relativo : esto es más como simplemente comenzar desde una referencia al elemento requerido y comenzar desde una posición específica. Siempre usa rutas relativas para probar elementos
Ejemplo de XPATH con instrucciones
Creé este script HTML para practicar, copiar y guardar como (.html) para usar con la descripción
<html>
<head><title>Store</title></head>
<body>
<musicshop id="music"><p><h2>MUSIC</p></h2>
<genre><h3><p>Hip-Hop</p></h3>
<ul>
<li>Travis Scott</li>
<li>Pop Smoke</li>
</ul>
</genre>
<genre country="korea"><h3><p>K-pop</p></h3>
<ul>
<li>G Dragon</li>
<li>Super Junior</li>
</ul>
</genre>
</musicshop>
<bookstore id='book'><p><h2>BOOKS</p></h2>
<bookgenre class = "fiction"><p><h3>Fiction</h2></p>
<ul>
<li><booktitle><h5><p>The Beetle</p></h5></booktitle></li>
<li><booktitle><h5><p>The Bell Jar</p></h5></booktitle></li>
<li><booktitle><h5><p>The Book Thief</p></h5></booktitle></bookgenre></li>
</ul>
<bookgenre class="horror"><p><h2>Horror</h2></p>
<ul>
<li><booktitle><h5><p><a href='www.goodreads.com/book/show/3999177-the-bad-seed'>The Bad Seed</a></p></h5></booktitle></li>
<li><booktitle><h5><p>House of Leaves</p></h5></booktitle></li>
<li><booktitle><h5><p>The Hanting of Hill House</p></h5></booktitle></bookgenre></li>
</ul>
</bookstore>
</body>
</html>
复制
El HTML creado genera una página web en la imagen de abajo
Practique el localizador XPATH y CSS en el enlace del navegador (Chrome)
- Presione F12 para abrir Chrome DevTools.
- El panel "Elementos" debería estar abierto de forma predeterminada.
- Presione Ctrl + F para habilitar la búsqueda DOM en el panel.
- Introduzca el selector de XPath o CSS para su evaluación.
- Si hay elementos coincidentes, se resaltarán en el DOM.
Personajes :
- Nombre de nodo: seleccione el nodo con el nombre dado
- "/" se selecciona del nodo raíz
- "//": ignora la etiqueta de la generación anterior y comienza desde el nodo actual que coincide con la selección
- "@" - Seleccione "nodo con atributo dado", usaré XPATH y el documento HTML anterior para
Elige el segundo HipHop
Ruta absoluta: - / html / body / musicshop / genre / ul / li [2] El índice no está especificado y el valor predeterminado es 1
Ruta relativa: - // musicshop // li [2] Para extraer , incluimos el nombre / text ()
para dar // musicshop // li [2] / text ()
Seleccionar por nombre de atributo
// librería / bookgenre [@ class = 'ficción'] `` `
// bookstore / bookgenre [contains (@ class, 'fiction')] también se puede usar
Rastreo web
Extraeremos enlaces de noticias y temas de la primera página de Nairaland.
Primero, comprobamos Nairaland y el localizador xpath que vamos a utilizar
Para enlaces: // tabla [@ summary = 'enlaces] // a / @ href
Para el tema: // tabla [@ resumen = 'enlaces] // a / text () debería ser una solución directa, pero
La etiqueta contiene texto, así que usaremos // tabla [contiene (@ clase, 'tableros')] [2] // tr [2] // a [descendiente-o-yo :: texto ()]
Después de eso, obtuvimos la información principal, así que importamos nuestra biblioteca
import scrapy
from scrapy.crawler import CrawlerProcess
Creamos una clase de araña y heredamos una araña de scrapy
class Spider(scrapy.Spider):
name = 'yourspider'
# start_requests method
def start_requests( self ):
yield scrapy.Request(url = "https://www.nairaland.com/", callback=self.parse)
def parse(self, response):
blocks = response.xpath("//table[contains(@class,'boards')][2]//tr[2]")
News_Titles = blocks.xpath(".//a[descendant-or-self::text()]").extract()
News_Links= blocks.xpath(".//a/@href").extract()
for crs_title, crs_descr in zip( News_Titles, News_Links ):
dc_dict[crs_title] = crs_descr
Entonces comenzamos nuestro rastreador
process = CrawlerProcess()
process.crawl(Spider)
process.start()
print(dc_dict)