Al utilizar python para trabajar con páginas html en la ciencia de datos

páginas HTML pueden contener información importante para los científicos de datos. Python es una buena herramienta para recuperar esa información. páginas HTML contienen datos en un formato jerárquico. A menudo se encuentran contenido HTML en un formulario HTML estricta o como XML.

El formulario HTML puede presentar problemas debido a que no siempre se sigue necesariamente reglas de formato estrictas. XML hace seguir estrictas reglas de formato debido a las normas que se han definido, lo que hace que sea más fácil de analizar. Sin embargo, en ambos casos, se utilizan técnicas similares para analizar una página. La primera sección que sigue describe cómo analizar las páginas HTML en general.

A veces no es necesario todos los datos en una página. En lugar de ello necesita datos específicos, que es donde entra en juego XPath. Puede utilizar XPath para localizar datos específicos en la página HTML y extraerlo para sus necesidades particulares.

Análisis de XML y HTML

Simplemente extraer datos de un archivo XML puede no ser suficiente. Los datos pueden no estar en el formato correcto. Usando este enfoque, se termina con una Marco de datos que contiene tres columnas de tipo str. Obviamente, no se puede llevar a cabo tanto la manipulación de datos con cuerdas. El siguiente ejemplo se da forma a los datos XML para crear una nueva trama de datos que contiene sólo el y elementos en el formato correcto.

LXML de pandas objectifyimport importación como distutils pdfrom importar utilxml = objectify.parse (open () `XMLData.xml`) root = xml.getroot () df = pd.DataFrame (columnas = ( `Número`, `booleano`)) para i en el rango de (0,4): obj = root.getchildren () [i] .getchildren () fila = dict (zip ([ `Número`, `Boolean`], [obj [0] .pyval, bool (util .strtobool (obj [2] .text))])) row_s = pd.Series (fila) row_s.name = obj [1] .textdf = df.append (row_s) tipo de impresión (df.ix [ `Primera`] [ `Número`]) tipo de impresión (df.ix [ `Primera`] [ `booleano`])

La obtención de un valor numérico de la elemento consiste en el uso de la pyval de salida, en lugar de la texto salida. El resultado no es una int, pero es numérico.

La conversión de la elemento es un poco más difícil. Debe convertir la cadena en un valor numérico mediante el strtobool () en función de distutils.util. La salida es una 0 para Falso valores y una 1 para Cierto valores. Sin embargo, eso no es todavía un valor booleano. Para crear un valor booleano, debe convertir el 0 o 1, usando bool ().

Este ejemplo también muestra cómo acceder a los valores individuales en el Marco de datos. Observe que el nombre establecimiento utiliza ahora la valor de elemento para facilitar el acceso. Usted proporciona el uso de un valor de índice ix y luego acceder a la función individual usando un segundo índice. La salida de este ejemplo es

Video: Atom, el Nuevo e Increible Editor de Codigo!

Usando XPath para la extracción de datos

Usando XPath para extraer datos de su conjunto de datos se puede reducir en gran medida la complejidad de su código y, potencialmente, hacer que sea más rápido también. El siguiente ejemplo muestra una versión XPath del ejemplo anterior. Tenga en cuenta que esta versión es más corta y no requiere el uso de una para lazo.

LXML de pandas objectifyimport importación como distutils pdfrom importar utilxml = objectify.parse (open () `XMLData.xml`) root = xml.getroot () = datos postal (mapa (int, root.xpath ( `Record / Número`)) , mapa (bool, mapa (util.strtobool, mapa (str, root.xpath ( `Record / Boolean`))))) df = pd.DataFrame (datos, columnas = ( `Número`, `Boolean`), índice = map (str, root.xpath ( `Record / cadena`))) tipo de dfprint de impresión (df.ix [ `Primera`] [ `Número`]) tipo de impresión (df.ix [ `Primera`] [ `booleano` ])

El ejemplo comienza igual que el ejemplo anterior, con la importación de los datos y la obtención del nodo raíz. En este punto, el ejemplo se crea un objeto de datos que contiene el número de registro y valor booleano pares. Debido a que las entradas del archivo XML son todas las cadenas, se debe utilizar la mapa() funcionar para convertir las cadenas a los valores apropiados.

Video: Poner la consola de Python en sublime text - Tutoriales y mas;

Trabajar con el número de registro es sencillo - todo lo que hacen es el mapa a una int. los XPath () función acepta un camino desde el nodo raíz a los datos que necesita, lo que es Número de registro en este caso.

Mapeo del valor booleano es un poco más difícil. Debe utilizar el util.strtobool () funcionar para convertir los valores booleanos cadena en un número que bool () puede convertir a un equivalente de Boole. Sin embargo, si intenta realizar sólo una doble asignación, se encontrará con un mensaje de error que indica que las listas no incluyen una función determinada, reducir().Para superar este obstáculo, se realiza un mapeo triples y convertir los datos en una cadena mediante el str () funcionar en primer lugar.

la creación de la Marco de datos es diferente, también. En lugar de añadir filas individuales, se agrega todas las filas de una sola vez mediante el uso de datos. Configuración de los nombres de las columnas es el mismo que antes. Sin embargo, ahora necesita alguna manera de añadir los nombres de las filas, como en el ejemplo anterior. Esta tarea se lleva a cabo mediante el establecimiento de la índice parámetro a una versión asignada de la XPath () salida para el Grabar / Cadena camino. Aquí está la salida que puede esperar:

 Número BooleanFirst 1 TrueSecond 2 FalseThird 3 TrueFourth 4 False
Artículos Relacionados