2011-11-27 41 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" /> 

Đây là những gì tôi đang cố gắng để trích xuất từ ​​và tôi nhận được:Python 2.7 Beautiful Soup img src Extract

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 

'''

Trả lời

29

Bạn đang đi qua nút BeautifulSoup đến re.findall. Bạn phải chuyển đổi nó thành chuỗi. Hãy thử:

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

Hơn thế nữa, sử dụng các công cụ BeautifulSoup cung cấp:

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

cung cấp cho bạn một danh sách tất cả các thuộc tính src của thẻ img của lớp 'sizedProdImage'.

0

Bạn đang tạo một đối tượng re, sau đó chuyển nó vào số re.findall mà dự kiến ​​một chuỗi là đối số đầu tiên:

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

Thay vào đó, hãy sử dụng thứ e .findall phương pháp của patImgSrc đối tượng bạn vừa tạo:

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

Tuy nhận được lỗi: Traceback (gần đây nhất gọi cuối cùng): File "C: \ Users \ BuyzDirect \ Desktop \ OverStock_Listing_Format_Tool.py", dòng 50, trong findPatImgSrc = patImgSrc .findall (imgsrc) LoạiError: chuỗi hoặc bộ đệm dự kiến – phales15

27

Có giải pháp đơn giản hơn:

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

Trong ví dụ của tôi, htmlText chứa các thẻ img nhưng nó có thể được sử dụng cho một URL quá. Xem câu trả lời của tôi 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'] 
Các vấn đề liên quan