Tuesday, November 8, 2016

Python Stock Options

Anoche escribí lo siguiente. Funcionó bien. Sólo tengo datos de 200 algo de los 400 símbolos de algo que tengo en el archivo, pero sacó los datos de las opciones para los 200 algo muy bien. Esta mañana, voy a ejecutar el código de nuevo (los mercados han estado abiertos durante casi una hora) y no tengo nada: Así que ejecutar un poco de una prueba: Tengo este error: Y este contenido del archivo encurtido: Nada ha cambiado De la noche a la mañana. Lo último que hice fue guardar y cerrar. Lo primero que hice después de despertarme fue ejecutarlo de nuevo. Estoy interesado en hacer análisis econométricos sobre derivados financieros. El principal obstáculo que he enfrentado es que no hay buenos recursos libres (al menos que yo sepa) para los datos históricos de las opciones. Por eso quiero crear mi propia base de datos personal de precios históricos de las opciones. He roto este proyecto en tres obstáculos principales: Descubra cómo obtener datos de las opciones desde dentro de python Elija un formato de almacenamiento de datos Automatice la recopilación de datos diarios Obteniendo datos de opciones en python Durante el verano tuve un poco de tiempo libre y me uní con mi Papá para crear un modelo de inversión. Si bien es un modelo muy simple, este post trata de construir una base de datos, así que no voy a entrar en detalles aquí. Basta con decir que necesitaba encontrar una manera de obtener datos de opciones de yahoo Finanzas. Este fue un desafío único porque a diferencia de los datos de equidad o datos de otras fuentes como FRED, los datos de opciones no tienen una descarga conveniente para el botón csv en cualquier parte del sitio web. En ese momento estaba leyendo el excelente libro Python for Data Analysis de Wes McKinney y tuve una idea de cómo implementar un rastreador web básico para analizar el html en yahoo y devolver los datos en un formato amigable con python. Larga historia corta, escribí algún código para hacer eso y se abrió paso en la versión 0.9 de la biblioteca de pandas (si no está familiarizado con los pandas y trabaja con datos en python definitivamente debería comprobarlo). Ahora sólo estos pocos comandos son necesarios para obtener datos de opciones de yahoo Finanzas: Los llamados y pone objetos son pandas DataFrames que contienen la misma información que se encuentra en la página de Finanzas yahoo para Apple Inc. opciones. Elegir el formato de archivo En la selección de un formato de archivo tuve dos consideraciones principales: el tamaño del archivo y la velocidad a la que se puede escribir / leer. Para probar esto, escribí un script simple que generó una matriz de 4000 por 4000 numpy aleatoria y funciones definidas para escribir y leer esos datos en diferentes formatos de archivo. Los formatos con los que elegí trabajar fueron csv, hdf5 (.h5) y MatLab (.mat). A continuación se muestra el script que utilicé para ejecutar la prueba: Después de que tenía este código simplemente disparó iPython y ejecutó el archivo (filetest. py) y utilizó la magia timeit para ver cuánto tiempo tomó cada uno de los tres métodos para leer y escribir los datos. Los resultados de tiempo, junto con el tamaño final de los archivos se resumen en la siguiente tabla: Es fácil ver que el tipo de archivo hdf5 es el mejor para elegir para mis propósitos. Me gustaría señalar aquí que la razón por la cual el formato de archivo hdf5 es 1/2 del tamaño del archivo. mat, es porque el dtype en el archivo. h5 es un flotador de 32 bits mientras que el dtype. mat es un flotador de 64 bits. Sin embargo, para las opciones de acciones que sólo en general tienen / cuidado acerca de los datos de dos decimales por lo que la precisión de 32 bits es suficiente. Automatización de la recuperación de datos El último paso para iniciar esta base de datos fue automatizar el proceso de recuperación de datos. Para ello he utilizado la popular herramienta de programación UNIX cron. Ejecuto OSX 10.8 Mountain Lion, y por defecto en 10.8 la herramienta cron está deshabilitada. Para corregir esto, simplemente ejecuté el siguiente comando en el terminal: Este comando crea el archivo / etc / crontab (si ya no existe) y lo listo para su uso por cron. No voy a dar una explicación detallada de cómo usar cron aquí (ya que todavía soy bastante nuevo en él mismo), pero googleando para que le dará un montón de ejemplos y tutoriales. Sin embargo, voy a dar la línea en mi archivo crontab que ejecuta el script: El siguiente paso fue escribir el script que tendría la llamada cron. Esto aparece a continuación. Tengo cron ejecutar este script a una hora especificada cada día de la semana y llenar el archivo hdf5. El archivo resultante tendrá una estructura anidada como la siguiente: La notación CTICKmm-yy representa una opción de llamada (C), un ticker dado (TICK) y la expiración de la opción (mm-aa). Dentro de cada uno de los conjuntos de datos hay tres columnas: precio de ejercicio, último precio en el contrato de opción y volumen en el último día de negociación. Después de ejecutar este script durante una noche, el archivo de datos hdf5 resultante era 7.648648 MB. Si permitiera que este archivo se ejecute cada día hábil durante un año, el tamaño final del archivo sería inferior a 2 GB. No está mal Si desea más información sobre cómo recojo los nombres de ticker o qué opciones de funcionalidad está en pandas 0.10 o anterior deje un comentario y haré todo lo posible para responder. Impresionante he estado deseando hacer algo como esto, ya que yo también quiero backtest algunas de mis estrategias. Probablemente debería cambiar 39 de las opciones de importación de Opciones39 a 39 de las opciones de importación pandas. io. data39, pero aparte de que su script funciona muy bien. ¿Estaría dispuesto a compartir los datos de la opción que usted ha recopilado hasta ahora podría retribuir el favor actuando como una copia de seguridad para ejecutar el script en caso de que alguna vez pierda la conectividad durante unos días. Estaba considerando probar aproximadamente con los precios generados con Black8211Scholes, pero los datos reales son obviamente mejores. Me alegro de que te guste el guión. De hecho, he dejado de ejecutar el archivo cada noche, así que no tengo demasiados datos. De lo contrario, estaría encantado de compartirlo con usted. Con respecto a los estados importados. Soy el autor de la clase de Opciones en pandas. En el momento de escribir este post de blog algunas de las funcionalidades que utilizo en el script hadn39t se han fusionado en una versión de pandas, por lo que llamé a mi versión local (en un archivo llamado opciones) en el que he basado la versión pandas FYI: There Son en realidad algunos cambios API que suceden con la clase Opciones dentro de los pandas en este momento. Si los cambios ocurren de la misma manera que uno de los otros contribuyentes ha sugerido, gran parte del código de este script puede ser obsoleto. Por lo menos todavía debe conseguir a gente comenzada Estoy en el proceso de setting-up una base de datos grande de las derivaciones. El análisis de weblinks está listo. Donde estoy un poco perdido es cómo crear la base de datos de todas las opciones individuales de tal manera que permite cálculos como SKEW, etc sin manualmente elegir las opciones individuales cada vez que hacer el cálculo. Cómo hacer referencias genéricas. Estoy un poco perdido aquí y quiere ordenar eso primero antes de seguir adelante con la creación de datos. Creo que el orden correcto en la tupla de retorno es puts, llamadas aapl. getoptionsdata (). Hey Martin, tienes razón. Cuando inicialmente agregé las opciones de recopilación de código a los pandas, tuve getoptionsdata devolver las llamadas en primer lugar. No estoy seguro de cuando / por qué alguien lo cambió. He actualizado el código en la publicación para utilizar el correcto pone, las llamadas de orden ahora. Aunque esto sería muy útil poder descargar los precios de las opciones. Para empezar, estaba usando el script que proporcionaste anteriormente (prácticamente). Tengo pandas 0.13.1, pero parece completamente roto. Los errores se producen con la siguiente línea: rawcalls option. getforwarddata (months100, callTrue, putFalse, nearFalse, abovebelow6). Desde que quiero obtener todos los datos de opción creo que tengo que utilizar el método getforwarddata. Los otros métodos parecen apoyar sólo obtener un mes en particular. El error es bastante largo, pero las últimas líneas son: Archivo quot / usr / local / lib / python2.7 / dist-packages / pandas / io / parsers. pyquot, línea 1653, en nextline raise StopIteration StopIteration ¿Alguien sabe cómo Arreglar esto También estoy ejecutando Ubuntu Linux. Creo que la versión 0.11 de Pandas estaba funcionando algo, aunque no obtendría todos los precios de las opciones. No estoy seguro de cómo usar pip para degradar en este punto, así que probablemente estoy atascado tratando de obtener la versión 0.13.1 de trabajo. Hey Anónimo (lo siento don39t saber su nombre, o si es Anónimo - que es impresionante) Lo sentimos que estas funciones aren39t funciona correctamente. Escribí este código hace un año y en el momento en que esto funcionó sin ningún problema. Pandas está bajo un gran desarrollo y parece que desde el momento en que escribí este código, el api ha pasado por algunos cambios de ruptura. Lamentablemente, no tengo tiempo ahora para pasar y cambiar el código de esta entrada para que funcione con 0,13. Puedo decir que toda la funcionalidad descrita en esta publicación todavía existe con v0.13, pero algunas de las firmas de método pueden haber cambiado. Creo que las docstrings para cada método de la clase Options deben ser lo suficientemente detalladas como para darle una buena idea acerca de lo que necesita cambiar. Usted puede encontrarlos aquí: github / pydata / pandas / blob / master / pandas / io / data. pyL545-L905 Si usted se siente para arriba para él y termina para arriba hacer los cambios necesarios, déjeme por favor saber y actualizaré el Código aquí para reflejarlos. PD Si lo intentas y estás teniendo un tiempo difícil, poste aquí de nuevo y trataré de dar alguna orientación. He estado ocupado con otro proyecto, pero básicamente he hecho un par de cambios para que las cosas funcionen. Por simplicidad acabo de realizar los cambios en el archivo data. py. Creo que los índices inmonth e inyear fueron calculados mal. También, en algunos casos el marco devuelve Ninguno. Ninguno estaba causando el choque. Si alguien tiene el tiempo que el código debe ser actualizado para sólo consultar las opciones de datos que realmente existen en el intervalo de mes de tiempo pasó pulg No estoy seguro de cómo analizar esta información del HTML. En este momento consultará a Yahoo para cada mes de datos, incluso cuando no haya opciones disponibles para ese mes / año para el método getforwarddata. Aquí está la salida de linux diff para los cambios que hice: diff pandas / io / data. py pandas.01 / io / data. py 25d24 lt DEBUG Verdadero 538,541d536 lt lt if (len (data) 0): lt return None lt 590,595c585 lt intenta: lt símbolo. símbolo auto. upper () lt excepto: lt msg quotsymbol debe ser un stringquot válido lt raise ValueError (msg) lt --- gt self. symbol symbol. upper () 860,866c850,861 lt lt (En meses): lt años (m-1) / 12 lt mon m - años12 lt inyears. append (añosCURYEAR) lt inmonthsimon --- gt inyears CURYEAR (meses 1) gt gt Averiguar cómo Muchos ítems en meses van más allá de 12 gt para cambiar 0 gt para i en rango (meses): gt si inmonthsi gt 12: gt inmonthsi - 12 gt para cambiar 1 gt gt Cambiar los elementos correspondientes en la lista de inyears. Gt para i en el rango (1, tochange 1): gt inyears-i 1 875,878c870,873 lt para i en rango (meses): lt m2 inmonthsi lt y2 inyearsi lt si DEBUG: print quotGetting s: s / squot (self. Símbolo, m2, y2) --- gt para mon en rango (meses): gt m2 inmonthsmon gt y2 inyearsmon gt 892,895d886 lt si frame es None: lt if DEBUG: print 39. no data39 lt continue lt Hola, Gracias por su buen trabajo. Parece que está actualmente roto - tal vez un cambio de esquema / esquema en yahoo (it39s que tableloc 13 en la llamada a getoptiondata ()) I39ll depurarlo cuando tengo tiempo, here39s los detalles hasta el momento: Conectado a pydev debugger (build 135.1057 ) Traceback (última llamada más reciente): Archivo quot / usr / share / pycharm / helpers / pydev / pydevd. pyquot, línea 1733, en debugger. run (setup39file39, None, None) Archivo quot / usr / share / pycharm / helpers /pydev/pydevd. pyquot, línea 1226, ejecute pydevimports. execfile (archivo, globales, locales) ejecute el script Archivo quot / home / chris / develop / src / trading / options. pyquot, línea 5, en puts, llamadas aapl. getoptionsdata (expirydate (2015, 1, 16)) Archivo quot / usr / lib / python2.7 / dist-packages / pandas / io / data. pyquot, línea 630, en getoptionsdata self. getcalldata) Archivo quot / usr / lib /python2.7/dist-packages/pandas/io/data. pyquot, línea 748, en getputdata return self. getoptiondata (mes, año, expiración, 13, 39puts39) Archivo quot / usr / lib / python2.7 / dist - IndexError: Ubicación de la tabla 13 inválido, 3 tablas encontradas en la importación de pandas. io. data Opciones desde la fecha de importación de fecha y hora aapl Opciones (por ejemplo, paquetes / pandas / io / data. pyquot, línea 673, en getoptiondata quot foundquot. format (tableloc, 39AAPL39, quotyahooquot) puts, llama aapl. getoptionsdata (expirydate (2015, 1, 16)) In3: import pandas In4: pandas. version Out4: 390.13.139 Hola, gracias por el comentario. Este código se ha roto debido a cambios en la API de Yahoo Finance. Creo que los desarrolladores de pandas tienen el código original que les di. Hola Spencer te disculpo por la pregunta anónima, pero, cuando ejecutaste este programa para cada ticker en tu lista de símbolos de NASDAQ y NYSE, ¿cuánto tiempo fue el tiempo de ejecución de una sesión entera Iteración Anónimo - no hay problema. Esta rutina tarda bastante tiempo en ejecutarse. Probablemente en el orden de 6-8 horas. Se podría acelerar un poco haciendo múltiples solicitudes a la vez utilizando los módulos de enhebrado y cola en la biblioteca estándar. Tengo un ejemplo de hacer esto con datos regulares de equidad aquí: gist. github / spencerlyon2 / 8a90d9fdffd15e3ecddb Spencer - Soy muy nuevo en python y la programación en general, pero lo encuentro poderoso y fascinante con la poca investigación / trabajo que he hecho. Hasta ahora he organizado un programa muy simple para hacer algo similar. Esto es lo que tengo hasta ahora: import datetime como dt import pandas como pd importe numpy como np de pandas. io. data import Opciones de pandas import DataFrame importación h5py como h5 num 0 newdatapd. DataFrame () while num lt tickers. size: Intenta: itickers39Symbol39num opciones Opciones (i, quotyahooquot) datos options. getoptionsdata () newdatanewdata. append (datos) except: pase imprimir num numnum1 En mi lista de ticker tengo 6280 símbolos o así, y me pareció que el getoptionsdata realiza mucho más rápido que el Método getalldata. En este momento esto se ejecuta en alrededor de 3 horas. Mi meta es cortar eso por 1 / 6th. Todavía está en las etapas básicas, pero funciona y reúne los datos para los tickers que lo contienen. Si usted tiene alguna sugerencia o sugerencia para mejorar el rendimiento de todos los oídos. Sé que una estructura de bucle no puede ser la más eficiente, pero todo para mí es prueba y error. Si esto es trivial y / o una pregunta tonta me disculpo, Nuevamente, soy nuevo y aprendo. Me imagino que el cuello de botella (parte más lenta) de este programa es recuperar los datos de la web. Usar las herramientas de cola e hilado en la biblioteca estándar como lo hice en el ejemplo con el que publiqué un enlace es probablemente la mejor manera de acelerar esta parte. Otra opción relativamente simple para hacer la recuperación de datos en paralelo es escribir una función que obtenga los datos de una lista única. A continuación, puede utilizar algo como IPython paralelo para asignar la función sobre la lista de tickers en paralelo. Un ejemplo de uso de mapas en paralelo puede encontrarse aquí: ipython. org/ipython-doc/2/parallel/paralleldemos A propósito, el solo bucle aquí no es ciertamente lo que toma este código mucho tiempo para correr - así que no se preocupe sobre eso. I39m lo siento, pero heven39t visitado este código en particular en más de 2 años. Pandas se mueve bastante rápido, por lo que no sorprende que el código en este post no funcione. No tengo actualmente el tiempo de depurar el guión, pero sugeriría mirar la documentación de los pandas para la opción actual de rascar características. Usted puede encontrarlo aquí pandas. pydata. org/pandas-docs/stable/remotedatayahoo-finance-options. Para listas de ticker. Yo estaba recibiendo de estas dos urls: No sé mucho acerca de la programación, pero tengo un montón de archivos de símbolo anual de intradata. co, pero tengo que tener por ejemplo año 2012-2015 en un mismo archivo. Debido a que quiero graficar en mi software como un gráfico extendido ¿Es posible hacer con este scriptOptions Precios en Python Por Michael Halls-Moore el 7 de septiembre de 2012 Disculpas por esa falta de actualizaciones, he estado ocupado trabajando en una opciones Precios en Python. Hasta ahora he logrado crear mi primera opción de ruta dependiente asiático pricer y finalmente me está proporcionando los resultados correctos. No está completamente listo para la implementación, ya que necesita optimización para ejecutarse a una velocidad aceptable en mi servidor. Aunque C es el idioma predominante para el precio de opciones, decidí ver cómo me iba a producir una biblioteca basada en todo Python. Esto no sólo mejoraría mis habilidades de Python, sino que permitiría una integración directa de la biblioteca en el sitio. La biblioteca, que estoy nombrando provisionalmente PyQuant, es muy simple en este momento. Se compone de dos componentes principales, un conjunto de soluciones de forma cerrada para llamadas / puts de vainilla y los digitales y un precio básico de Monte Carlo que los precios de los doble-digitales y opciones de energía. Con el tiempo buscaré o obtendré soluciones cerradas para todas las opciones que pueda, pero ahora mismo estoy disfrutando del desarrollo del solucionador de Monte Carlo. Las soluciones de forma cerrada se basan en dos funciones estadísticas: la Función de Densidad de Probabilidad Normal y la Función de Distribución Normal Acumulativa. Una aproximación numérica al CNDF se puede encontrar en 1. De hecho, muchas de las soluciones de forma cerrada se dan en ese texto, que es de donde las obtuve. Con el NPDF un CNDF pude calcular soluciones para las llamadas de vainilla y pone, así como los griegos comunes. Delta, Gamma, Rho, Vega y Theta. Todavía estoy trabajando en soluciones cerradas para las opciones de Digital. Las soluciones basadas en Monte Carlo funcionan de manera diferente. Hay un módulo que contiene todos los objetos de pago para cada tipo de opción: Llamar, Poner, Reenviar, Llamada digital, etc. Otro módulo almacena objetos de opción. En el caso de la opción de la vainilla, un tiempo de la expiración y un pay-off son requeridos. La huelga está encapsulada en el objeto de pago, lo que garantiza la resposabilidad del código tanto para los pagos como para las opciones. El módulo final incluye motores de Monte Carlo que calculan una amplia gama de evoluciones de stock path (basadas en el Movimiento Browniano Geométrico) y las usan para calcular una compensación esperada de la opción. El descuento se descontará a la tasa libre de riesgo y esto proporciona el precio. En esta etapa es costoso desde el punto de vista computacional volver a ejecutar el pricer Monte Carlo cuando se cambia una entrada. Hay algunas maneras de optimizar esto. La primera es hacer uso de SciPy. Una biblioteca científica de Python. Incluye un montón de estrategias de optimización - eche un vistazo a este artículo sobre Performance Python. Su rendimiento en comparación con C sólo puede sorprender. El segundo es escribir realmente una biblioteca dedicada de C que se puede llamar de Python. Sin embargo, esto es contrario a la idea de una biblioteca de precios de derivados de Python. 1 - Joshi, M. Los conceptos y la práctica de la financiación matemática. Michael Halls-Moore Mike es el fundador de QuantStart y ha estado involucrado en la industria de finanzas cuantitativas durante los últimos cinco años, principalmente como desarrollador de Quant y más tarde como consultor de comerciante de Quant para los hedge funds. Learn Quant habilidades Si usted es Un comerciante o un inversor y le gustaría adquirir un conjunto de habilidades de negociación cuantitativa, usted está en el lugar correcto. El curso de Trading con Python le proporcionará las mejores herramientas y prácticas para la investigación de comercio cuantitativo, incluyendo funciones y guiones escritos por expertos comerciantes cuantitativos. El curso le da el máximo impacto para su tiempo invertido y dinero. Se centra en la aplicación práctica de la programación al comercio en lugar de la informática teórica. El curso se pagará rápidamente ahorrándote tiempo en el procesamiento manual de datos. Pasará más tiempo investigando su estrategia e implementando operaciones rentables. Descripción general del curso Parte 1: Conceptos básicos Usted aprenderá por qué Python es una herramienta ideal para el comercio cuantitativo. Comenzaremos por crear un entorno de desarrollo y luego le presentaremos a las bibliotecas científicas. Parte 2: Manejo de los datos Aprenda a obtener datos de varias fuentes gratuitas como Yahoo Finance, CBOE y otros sitios. Leer y escribir múltiples formatos de datos incluyendo archivos CSV y Excel. Parte 3: Investigación de estrategias Aprenda a calcular PL y métricas de rendimiento como Sharpe y Drawdown. Construir una estrategia comercial y optimizar su rendimiento. Múltiples ejemplos de estrategias se discuten en esta parte. Parte 4: Viviendo en Vivo Esta parte está centrada en Interactive Brokers API. Usted aprenderá cómo obtener datos de stock en tiempo real y colocar pedidos en vivo. Lotes de código de ejemplo El material de curso consiste en portátiles que contienen texto junto con código interactivo como éste. Podrás aprender interactuando con el código y modificándolo a tu gusto. Será un gran punto de partida para escribir sus propias estrategias Si bien algunos temas se explican con gran detalle para ayudarle a entender los conceptos subyacentes, en la mayoría de los casos ni siquiera tendrá que escribir su propio código de bajo nivel, debido al apoyo de los existentes Bibliotecas de fuentes. TradingWithPython biblioteca combina gran parte de la funcionalidad discutida en este curso como un ready-to-use funciones y se utilizará a lo largo del curso. Pandas le proporcionará toda la potencia de carga pesada necesaria en el crujido de datos. Todo el código se proporciona bajo la licencia BSD, permitiendo su uso en aplicaciones comerciales Calificación del curso Un piloto del curso se llevó a cabo en la primavera de 2013, esto es lo que los estudiantes llegaron a decir: Matej curso bien diseñado y buen entrenador. Definitivamente vale la pena su precio y mi tiempo Lave Jev obviamente conocía sus cosas. Profundidad de cobertura era perfecta. Si Jev corre algo como esto de nuevo, Ill ser el primero en inscribirse. John Phillips Su curso realmente me hizo saltar comenzó considerando python para el análisis del sistema de valores. Python Beautiful Soup Ejemplo: Yahoo Finance Scraper Python ofrece una gran cantidad de herramientas poderosas y fáciles de usar para raspar sitios web. Uno de los módulos útiles de Pythons para raspar sitios web es conocido como Beautiful Soup. En este ejemplo le proporcionamos un ejemplo de Beautiful Soup, conocido como raspador de web. Esto obtendrá datos de una página de Finanzas de Yahoo acerca de las opciones de acciones. Su bien si usted no sabe nada acerca de las opciones de acciones, lo más importante es que el sitio web tiene una tabla de información que puede ver a continuación que wed como para utilizar en nuestro programa. A continuación encontrará listados de las opciones de compra de Apple Computer. Primero necesitamos obtener el código HTML para la página. Hermosa sopa no descargar el contenido para nosotros, podemos hacer eso con Pythons urllib módulo, una de las bibliotecas que viene de serie con Python. Buscando la sopa de la página de Yahoo Finance gtgtgt. FindAll (texto AAPL130328C00350000) 0. padre. padre. Lt / td gt lt / td gt lt td gt lt / td gt lt / td gt lt / ts gt lt / a gt lt / a gt lt / / Td gt lt td alinear a la derecha gt lt b gt lt / td gt tt lt gt lt / td gt tt gt lt / span gt lt / td Lt td alinear a la derecha gt lt / td gt lt td alinear a la derecha gt 1,05 lt / td gt lt td alinear la derecha gt 10 lt / td gt lt td alinear la derecha gt 10 lt / td gt lt / tr gt Bingo. Su todavía un poco desordenado, pero usted puede ver todos los datos que necesitamos está allí. Si ignora todas las cosas entre paréntesis, puede ver que se trata sólo de los datos de una fila. x. Texto para x en y. padre. Contenido Este código es un poco denso, así que permite separarlo pieza por pieza. El código es una lista de comprensión dentro de una lista de comprensión. Veamos primero el interior: Esto usa la función findAll de BeautifulSoup para obtener todos los elementos HTML con una etiqueta td, una clase de yfnch y un nowrap de nowrap. Elegimos esto porque es un elemento único en cada entrada de la tabla. Si acabábamos de obtener td s con la clase yfnch habríamos conseguido siete elementos por entrada de tabla. Otra cosa a tener en cuenta es que tenemos que envolver los atributos en un diccionario porque la clase es una de las palabras reservadas Pythons. De la tabla de arriba se devolvería esto: lttd nowrap nowrap gt lta href /q/opsAAPLampampampk110.000000 gt ltstronggt 110.00 lt / stronggt lt / agt lt / tdgt Necesitamos obtener un nivel más alto y luego obtener el texto de todo el niño Nodos de este nodo padre. Eso es lo que hace este código:


No comments:

Post a Comment