Raspado web con hermosa sopa

Raspado web con hermosa sopa
El Scraping web es una técnica utilizada para seleccionar y extraer contenido específico de los sitios web. Por ejemplo, cuando queremos monitorear los precios y cómo cambian, podemos usar un raspador web para extraer solo la información que queremos de un sitio web y volcarlos en un archivo de Excel. En este tutorial, aprenderemos a raspar la web usando BeautifulSoup.

Primero, instale BeautifulSoup de la siguiente manera:

PIP install beautifulSoup4

BeautifulSoup se aplica a un archivo HTML, por lo que debemos comenzar obteniendo el contenido HTML de una página web. Esto generalmente se hace utilizando el módulo de solicitudes. En este ejemplo específico, obtendremos el contenido HTML de una página web y lo mostraremos. Para esto, primero establecemos la URL; En este caso, he elegido el sitio web de Media de Sense Common (porque tiene una lista de películas con calificaciones, que podemos estar interesados ​​en raspar). Luego usamos el método get () para obtener el objeto de respuesta y extraer la parte HTML usando el contenido o el atributo de texto.

Solicitudes de importación
url = "https: // www.commonsenemedia.org/revistas de películas "
cuerpo = solicitudes.Obtener (URL)
Body_text = Body.contenido # o cuerpo.texto
impresión (cuerpo.contenido) # o imprimir (cuerpo.texto)

Ahora podemos comenzar a usar Beautifulsoup. Creamos un objeto BeautifulSoup que toma dos argumentos: el archivo HTML y el tipo de analizador. Hay cuatro analizadores disponibles - HTML.analizador, LXML, LXML-XML y HTML5LIB.

de bs4 import beautifulsoup
sopa = beautifulSoup (Body_text, 'lxml')

También se debe instalar el analizador. En este caso, he elegido el analizador LXML, por lo que lo instalaré.

PIP install lxml

Ahora, podemos hacer casi cualquier cosa, pero exploraremos las diferentes posibilidades antes de comenzar a raspar la web.

(i) El método Prettify () reescribirá el texto en un formato legible y "bonito".

sopa.embellecer()

(ii) El método del título recuperará el título.

sopa.título

(iii) El método "P" extraerá todas las etiquetas P del código HTML.

sopa.pag

(iv) El método "A" extraerá todas las etiquetas A del código HTML.

sopa.a

(v) El método find_all () encontrará todos los elementos web que contienen un argumento particular. En este caso, he pasado "A", así que find_all ("a") encontrará todas las etiquetas "A".

sopa.find_all ('a')

(vi) El método de búsqueda encontrará todos los argumentos aprobados. En este caso, pasamos el argumento id = "Contraseña."Por lo tanto, buscará el código HTML la identificación, y si coincide, recupere la cláusula.

sopa.buscar (id = "contraseña")

Por lo general, nos gustaría raspar una página web para trabajos, películas, cursos, etc., junto con su información respectiva (como precios y calificaciones). En este caso, estamos interesados ​​en un sitio web, particularmente raspando su lista de películas.

Solicitudes de importación
url = "https: // www.commonsenemedia.org/revistas de películas "
cuerpo = solicitudes.Obtener (URL)
Body_text = Body.contenido
de bs4 import beautifulsoup
sopa = beautifulSoup (Body_text, 'lxml')

En este caso particular, el código HTML de cada nombre de la película (lo que estamos raspando) está dentro de un contenedor. Primero comenzamos inspeccionando el elemento en cuestión. En mi caso, he optado por inspeccionar el título de la primera película ("Till Death").

Cuando inspeccione el elemento, notará que lo que buscamos, el título de la película "Till Death", está contenida dentro de una etiqueta "Div" con clase "Contenido -contenido -Wrapper."Esta primera etiqueta" Div "seguirá recurriendo a lo largo del código HTML, ya que cada título de película está contenido en una etiqueta de este tipo" Div ". Y entonces decimos que para cada div en Divs, deseamos seleccionar la etiqueta sub- "Div" con una clase diferente de "Vistas de vistas de campo de campo-referencia-revisión de resultados de resultados."Después de eso, vemos una etiqueta" fuerte "con la clase" contenido de campo."Así que hacemos lo mismo otra vez. Y finalmente, nuestro título en sí está anidado con una etiqueta "A", por lo que seleccionamos la etiqueta "A".

Divs = sopa.find_all ("div", class _ = "content-content-wrapper")

Tenga en cuenta aquí que después de la clase de la palabra, hay un bajo. Este subrayamiento distingue la clase de código HTML de las clases de Python. Entonces escribimos el código que extraerá la etiqueta "Div" con la clase "Contenido-Content-Wrapper."

Entonces escribes:

# divs = sopa.find_all ("div", 'class': 'content-content-wrapper')
para div en divs:
divs2 = div.find_all ("div", class _ = "Vistas del campo Vistas del campo-campo-field-reference-review-in-prod-title")
para div en divs2:
Strongs = div Div.find_all ("fuerte", clase _ = "campo-contenido")
para fuerte en fuertes:
aa = fuerte.find_all ("a")
para un en aa:
imprimir (un.texto)

Existen los bucles para elegir cada película. Finalmente, cuando queremos seleccionar el texto, decimos un.texto. Este último imprimirá cada título de película, y de tal manera, podemos raspar lo que queramos.

Ahora, supongamos que deseamos guardar estos datos en un archivo CSV; Eso también es posible. Para escribir en CSV, primero debe importar el módulo CSV. Primero, abramos el archivo donde queremos que se almacene la información. Aquí pasaremos tres argumentos: el nombre del archivo, el modo y si queremos una nueva línea o no. Aquí, estamos agregando una nueva línea igual a nada para evitar que el archivo CSV agregue devoluciones (o nuevas líneas vacías) después de cada entrada. En segundo lugar, pasamos el archivo al método escritor (). Tercero, escribimos una nueva fila. En este caso, llamo a mi nueva fila "películas" porque es el encabezado de lo que debe seguir.

Importar CSV
file = Open ("Película.CSV "," W ", NewLine =")
file_write = csv.escritor (archivo)
file_write.Writerow (['películas'])

Cuarto, en lugar de simplemente imprimir la variable "A", lo despojaremos de espacios vacíos y luego usaremos el método Escritura () para escribirlo en el archivo CSV.

para div en divs:
divs2 = div.find_all ("div", class _ = "Vistas del campo Vistas del campo-campo-field-reference-review-in-prod-title")
para div en divs2:
Strongs = div Div.find_all ("fuerte", clase _ = "campo-contenido")
para fuerte en fuertes:
aa = fuerte.find_all ("a")
para un en aa:
file_write.Writerow ([A.texto.banda()])

Todo el código se vería algo así:

Solicitudes de importación
url = "https: // www.commonsenemedia.org/revistas de películas "
cuerpo = solicitudes.Obtener (URL)
Body_text = Body.contenido
de bs4 import beautifulsoup
sopa = beautifulSoup (Body_text, 'lxml')
Divs = sopa.find_all ("div", class _ = "content-content-wrapper")
Importar CSV
file = Open ("Película.CSV "," W ", NewLine =")
file_write = csv.escritor (archivo)
file_write.Writerow (['películas'])
para div en divs:
divs2 = div.find_all ("div", class _ = "Vistas del campo Vistas del campo-campo-field-reference-review-in-prod-title")
para div en divs2:
Strongs = div Div.find_all ("fuerte", clase _ = "campo-contenido")
para fuerte en fuertes:
aa = fuerte.find_all ("a")
para un en aa:
file_write.Writerow ([A.texto.banda()])

Este es solo un ejemplo simple. En realidad, el raspado web es tan poderoso que puede raspar y monitorear casi cualquier página web.

Codificación feliz!