El raspado web es una técnica de software para extraer información de sitios web. Esta técnica se centra principalmente en la transformación de datos no estructurados (formato HTML) en la web en datos estructurados.
Bibliotecas necesarias para el raspado web: –
Como sabemos, python es un lenguaje de programación de código abierto. Puede encontrar muchas bibliotecas para realizar una función. Por lo tanto, es necesario encontrar la mejor biblioteca para usar. Prefiero BeautifulSoup (biblioteca de Python), ya que es fácil e intuitivo para trabajar. Precisamente, usaré dos módulos de Python para raspar datos:
- ¿Puede el servidor Apache Tomcat manejar una gran cantidad de usuarios?
- Cómo acelerar mi sitio web sin conocimientos previos de codificación
- ¿Dónde puedo encontrar algunos buenos proyectos de programación de ruby que pueda probar?
- ¿Cuándo debe usar float vs inline-block vs table vs flex?
- ¿Debo actualizar mi aplicación backbone.js de 0.9.2 a 1.0?
- Urllib2: es un módulo de Python que se puede utilizar para recuperar URL. Define funciones y clases para ayudar con las acciones de URL (autenticación básica y de resumen, redirecciones, cookies, etc.).
- BeautifulSoup: es una herramienta increíble para extraer información de una página web. Puede usarlo para extraer tablas, listas, párrafos y también puede poner filtros para extraer información de las páginas web. En este artículo, utilizaremos la última versión de BeautifulSoup 4.
Desguace de una página web con BeautifulSoup
Aquí, estoy raspando datos de una página de Wikipedia. Nuestro objetivo final es extraer la lista de capitales de territorios estatales y sindicales en India. Y algunos detalles básicos como el establecimiento, el antiguo capital y otros forman esta página de wikipedia. Aprendamos con este proyecto paso a paso:
- Importar bibliotecas necesarias:
# Importar la biblioteca utilizada para consultar un sitio web
importar urllib2
# especifique la url
wiki = “https://en.wikipedia.org/wiki/List_of_state_and_union_territory_capitals_in_India”
# Consulte el sitio web y devuelva el html a la variable ‘página’
página = urllib2.urlopen (wiki)
# Importa las funciones Beautiful Sopa para analizar los datos devueltos desde el sitio web
desde bs4 import BeautifulSoup
#Prese el html en la variable ‘página’ y guárdelo en formato Beautiful Soup
sopa = BeautifulSoup (página)
- Use la función “prettify” para ver la estructura anidada de la página HTML
Arriba, puede ver esa estructura de las etiquetas HTML. Esto te ayudará a conocer las diferentes etiquetas disponibles y cómo puedes jugar con ellas para extraer información. - Trabaja con etiquetas HTML
- sopa. : Devuelve el contenido entre la etiqueta de apertura y cierre, incluida la etiqueta. En [30]: soup.title Fuera [30]:
Lista de capitales de territorios estatales y sindicales en India – Wikipedia, la enciclopedia libre - soup. .string: Cadena de retorno dentro de la etiqueta dada En [38]: soup.title.string Fuera [38]: u’Lista de capitales de territorios estatales y sindicales en India – Wikipedia, la enciclopedia libre ‘
- Encuentre todos los enlaces dentro de las etiquetas de la página :: Sabemos que podemos etiquetar un enlace usando la etiqueta ““. Entonces, deberíamos ir con la opción soup.a y debería devolver los enlaces disponibles en la página web. Vamos a hacerlo. En [40]: soup.a Fuera [40]: Arriba, puede ver que solo tenemos una salida. Ahora para extraer todos los enlaces dentro de , usaremos ” find_all ().
Arriba, muestra todos los enlaces, incluidos títulos, enlaces y otra información. Ahora para mostrar solo enlaces, necesitamos iterar sobre cada una etiqueta y luego devolver el enlace usando el atributo “href” con get . - Encuentre la tabla correcta: a medida que buscamos una tabla para extraer información sobre las capitales estatales, primero debemos identificar la tabla correcta. Escribamos el comando para extraer información dentro de todas las etiquetas de la tabla . all_tables = soup.find_all (‘table’) Ahora para identificar la tabla correcta, usaremos el atributo “class” de la tabla y lo usaremos para filtrar la tabla correcta. En Chrome, puede verificar el nombre de la clase haciendo clic derecho en la tabla requerida de la página web -> Inspeccionar elemento -> Copiar el nombre de la clase O ir a través del resultado del comando anterior para encontrar el nombre de la clase de la tabla correcta. right_table = soup.find (‘table’, class _ = ‘wikitable sobleble plainrowheaders’) right_table Arriba, podemos identificar la tabla correcta.
- Extraiga la información en DataFrame: aquí, debemos iterar a través de cada fila (tr) y luego asignar cada elemento de tr (td) a una variable y agregarlo a una lista. Primero veamos la estructura HTML de la tabla (no voy a extraer información para el encabezado de la tabla
)
Arriba, puede notar que el segundo elemento de está dentro de la etiqueta no , por lo que debemos ocuparnos de esto. Ahora para acceder al valor de cada elemento, usaremos la opción “buscar (texto = Verdadero)” con cada elemento. Miremos el código:
#Generar listas
A = []
B = []
C = []
D = []
E = []
F = []
G = []
para fila en right_table.findAll (“tr”):
celdas = row.findAll (‘td’)
states = row.findAll (‘th’) # Para almacenar datos de la segunda columna
si len (celdas) == 6: #Solo extraer el cuerpo de la tabla sin encabezado
A.append (celdas [0] .find (texto = Verdadero))
B.append (indica [0] .find (texto = Verdadero))
C.append (celdas [1] .find (texto = Verdadero))
D.append (celdas [2] .find (texto = Verdadero))
E.append (celdas [3] .find (texto = Verdadero))
F.append (celdas [4] .find (texto = Verdadero))
G.append (celdas [5] .find (texto = Verdadero))
# importar pandas para convertir la lista a un marco de datos
importar pandas como pd
df = pd.DataFrame (A, columnas = [‘Número’])
df [‘Estado / UT’] = B
df [‘Admin_Capital’] = C
df [‘Legislative_Capital’] = D
df [‘Judiciary_Capital’] = E
df [‘Year_Capital’] = F
df [‘Former_Capital’] = G
df
Finalmente, tenemos datos en el marco de datos:
Lee mas…