Me pregunto cómo eliminar información de un sitio web donde hay varios elementos que tienen los mismos identificadores de los que quiero eliminar datos de precios. El problema que tengo es que cuando recorro cada div e imprimo () veo que se pega varias veces en la consola. Supongo que esto se debe al div. Estoy localizando múltiples elementos encapsulados con la misma etiqueta + nombre de clase.
GraphicPrice = soup.findAll('div', class_='col') for price in GraphicPrice: prices = price.find('span', class_='price__amount') if prices is None: pass else: print(prices.text)Producción:
£859.99 £859.99 £1,049.99 £1,049.99 £829.99 £829.99 £899.99 £899.99 £999.95 £999.95 £999.95 £999.95Lo que quiero es eliminar la información duplicada y entender cómo refactorizar mi código para evitar que esto suceda.
Quiero que se impriman todos los elementos de los precios de la página. Actualmente obtengo los precios pero está duplicado 3 veces.
Cualquier ayuda sería apreciada. (Todavía me estoy inclinando) :)
primero, desecha todas las etiquetas div con la clase "col"
soup.findAll('div', class_='col')esta etiqueta div tiene una clase de intervalo y esa clase tiene otras dos etiquetas de intervalo anidadas.
Entonces, si codificas así
price.find('span', class_='price__amount')elimina dos etiquetas de intervalo con "price_amount" en cada etiqueta div. que representa una clase incorrecta.
si desea una segunda etiqueta de intervalo, su código es así.
soup.findAll('span', class_='price--sale--colored').find('span', class_='price__amount')Use .select('span') para obtener un objeto desde el interior del objeto seleccionado como
GraphicPrice = soup.findAll('div', class_='col') for price in GraphicPrice: prices = price.select('span')Me topé con un error de este tipo recientemente que me trajo aquí en busca de respuestas, pero por desgracia, lo descubrí y aquí estoy publicando la solución para aquellos que la necesitarán en los próximos días.
Eso sí, hay diferentes enfoques para un problema
Por lo tanto, elimine la lista así, pero configure la lista para generar elementos alternos de la lista.
GraphicPrice = soup.findAll('div', class_='col') for price in GraphicPrice: prices = price.find('span', class_='price__amount') if prices is None: pass else: print(prices.text) ### then loop the list to get ###alternating values new_price= prices[1::2] #or newprice= [prices[p] for p in range(len(prices)) if p%2 ==0]