web-dev-qa-db-fra.com

Python 2.7 Belle Soupe Img Src Extrait

for imgsrc in Soup.findAll('img', {'class': 'sizedProdImage'}):
    if imgsrc:
        imgsrc = imgsrc
    else:
        imgsrc = "ERROR"

patImgSrc = re.compile('src="(.*)".*/>')
findPatImgSrc = re.findall(patImgSrc, imgsrc)

print findPatImgSrc

'''
<img height="72" name="proimg" id="image" class="sizedProdImage" src="http://imagelocation" />

C’est ce que j’essaie d’extraire et j’obtiens:

findimgsrcPat = re.findall(imgsrcPat, imgsrc)
File "C:\Python27\lib\re.py", line 177, in findall
    return _compile(pattern, flags).findall(string)
TypeError: expected string or buffer

'' '

17
phales15

Vous passez le noeud beautifulsoup pour ré-identifier. Vous devez le convertir en chaîne. Essayer:

findPatImgSrc = re.findall(patImgSrc, str(imgsrc))

Mieux encore, utilisez les outils fournis par beautifulsoup:

[x['src'] for x in soup.findAll('img', {'class': 'sizedProdImage'})]

vous donne une liste de tous les attributs src des balises img de la classe 'sizeProdImage'.

29
soulcheck

Il y a une solution plus simple: 

 soup.find('img')['src']
35
StanleyD

Dans mon exemple, htmlText contient la balise img mais peut également être utilisé pour une URL. Voir ma réponse ici

from BeautifulSoup import BeautifulSoup as BSHTML
htmlText = """<img src="https://src1.com/" <img src="https://src2.com/" /> """
soup = BSHTML(htmlText)
images = soup.findAll('img')
for image in images:
    print image['src']
0
Abu Shoeb

Vous créez un objet re, puis vous le transmettez à re.findall qui attend une chaîne comme premier argument:

patImgSrc = re.compile('src="(.*)".*/>')
findPatImgSrc = re.findall(patImgSrc, imgsrc)

À la place, utilisez la méthode .findall de l'objet patImgSrc que vous venez de créer:

patImgSrc = re.compile('src="(.*)".*/>')
findPatImgSrc = patImgSrc.findall(imgsrc)
0
Kirk Strauser