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
'' '
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'.
Il y a une solution plus simple:
soup.find('img')['src']
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']
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)