Как проверить, чтобы тег содержал определенный атрибут или нет? - PullRequest
1 голос
/ 11 октября 2019

Я хочу удалить теги img из содержимого. Но проблема в том, что некоторые из них связываются с data-src, а некоторые - с src.

я пробовал следующее:

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']

Все еще не работает, я хочу очистить всеURL изображения, где он содержит data-src или src.

Ответы [ 3 ]

1 голос
/ 11 октября 2019

Попробуйте это с 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 голос
/ 11 октября 2019

Вы можете использовать селектор css или синтаксис, чтобы собрать список любого атрибута в теге img, а затем использовать вложенный .get

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 голос
/ 11 октября 2019

Попробуйте с лямбдой, что-то вроде этого:

img_l = lambda tag: (getattr(tag, "name") == "img" and "src" in tag.attrs)
images = content.find_all(img_l)    
...