Quiero eliminar las etiquetas img del contenido. Pero el problema es que algunos de los img contactan data-src y algunos contactan src.
He intentado lo siguiente:
If (content.find ('img', {'itemprop': 'contentUrl'}) ['data-src']):
image=content.find('img',{'itemprop':'contentUrl'})['data-src']
Elif (content.find ('img', {'itemprop': 'contentUrl'}) ['src']):
image=content.find('img',{'itemprop':'contentUrl'})['src']
Todavía no funciona, quiero raspar toda la url de la imagen donde contiene data-src o src.
1
Nirmal Patel
11 oct. 2019 a las 19:21
3 respuestas
La mejor respuesta
Intente esto con item.attrs
.
for item in content.select('img[itemprop="contentUrl"]'):
if 'data-src' in item.attrs:
print(item['data-src'])
if 'src' in item.attrs:
print(item['src'])
1
KunduK
11 oct. 2019 a las 16:44
Puede usar el selector css o la sintaxis para recopilar la lista de cualquiera de los atributos en la etiqueta img y luego usar .get anidado
from bs4 import BeautifulSoup as bs
html = '''
<img src="mePlease.gif" alt="Yey" height="42" width="42">
<img data-src="me2.gif" alt="Yey" height="42" width="42">
'''
soup = bs(html, 'lxml')
attrs = [i.get('src', i.get('data-src', None)) for i in soup.select('img[src],img[data-src]')]
print(attrs)
1
QHarr
11 oct. 2019 a las 19:46
Prueba con lambda, algo como esto:
img_l = lambda tag: (getattr(tag, "name") == "img" and "src" in tag.attrs)
images = content.find_all(img_l)
1
Wonka
11 oct. 2019 a las 16:41