2011-11-27 22 views
14
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" /> 

Esto es lo que estoy tratando de extraer de y estoy consiguiendo:Python 2.7 Hermosa sopa img src Extracto

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 

'''

Respuesta

29

estás pasando nodo BeautifulSoup a re.findall. Tienes que convertirlo a cadena. Proveedores:

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

mejor aún, utilizar las herramientas BeautifulSoup dispone:

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

le da una lista de todos los atributos src de etiquetas img de clase 'sizedProdImage'.

0

Estás creando un objeto re, a continuación, pasando en re.findall la que espera una cadena como primer argumento:

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

su lugar, utilice º e .findall método de la patImgSrc que acaba de crear objeto:

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

Aún consiguiendo el error: Rastreo (llamada más reciente pasado): archivo "C: \ Users \ BuyzDirect \ Desktop \ OverStock_Listing_Format_Tool.py", línea 50, en findPatImgSrc = patImgSrc .findall (imgsrc) TypeError: string o buffer esperado – phales15

27

No es más simple solución:

soup.find('img')['src'] 
0

En mi ejemplo, el htmlText contiene la etiqueta img pero se puede utilizar para una dirección URL también. Véase mi respuesta here

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