Solo intento imprimir el valor upc de todas las secciones dentro de la sección de clase results que tienen un valor para el atributo upc y tampoco contienen la clase {{X3} }.

<div class="results">
  <div upc="1284665">This one</div>
  <div upc="8432651">This one</div>
  <div upc>Not this one</div>
  <div upc="1384268" class="EAN">Not this one too</div>
</div>

Salida deseada:

1284665
8432651

Este es el código que tengo ahora, pero incluye todas las secciones dentro de la sección de clase results.

html = '''<div class="results">
  <div upc="1284665">This one</div>
  <div upc="8432651">This one</div>
  <div upc>Not this one</div>
  <div upc="1384268" class="EAN">Not this one too</div>
</div>'''

soup = BeautifulSoup(html, 'lxml')

for section in soup.select_one('.results'):
    print(section)

0
Anatol 30 oct. 2019 a las 21:47

3 respuestas

La mejor respuesta

Esto está usando BeautifulSoup 4.7+ Esto es bastante fácil con los selectores CSS:

from bs4 import BeautifulSoup

html = """
<div class="results">
  <div upc="1284665">This one</div>
  <div upc="8432651">This one</div>
  <div upc>Not this one</div>
  <div upc="1384268" class="EAN">Not this one too</div>
</div>
"""

soup = BeautifulSoup(html, 'lxml')

for section in soup.select('.results div[upc]:not([upc=""], .EAN)'):
    print(section['upc'])

Salida

1284665
8432651
1
facelessuser 30 oct. 2019 a las 19:09

Puede utilizar esto:

for div in soup.find_all("div"):
    if div.get("upc") and "EAN" not in div.get("class", default=[]):
        print(div.get("upc"))
1
Moshe perez 30 oct. 2019 a las 19:07

Si está familiarizado con xpaths y los árboles de navegación, puede intentar usar lxml.

import lxml
from lxml import html

html_content = '''<div class="results">
  <div upc="1284665">This one</div>
  <div upc="8432651">This one</div>
  <div upc>Not this one</div>
  <div upc="1384268" class="EAN">Not this one too</div>
</div>'''
tree = html.fromstring(html_content)
Items = tree.xpath("//div/div[not(contains(@class,'EAN'))]") 


for item in Items:
    if(item.attrib['upc']!=None):
        print(item.attrib['upc'])
1
Sureshmani 30 oct. 2019 a las 19:13