Python 2.7 Красивый суп Img Src Extract - PullRequest
20 голосов
/ 28 ноября 2011
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" />

Это то, из чего я пытаюсь извлечь, и получаю:

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

'' '

Ответы [ 4 ]

41 голосов
/ 10 июля 2013

Есть более простое решение:

 soup.find('img')['src']
31 голосов
/ 28 ноября 2011

Вы передаете красивый узел на re.findall. Вы должны преобразовать его в строку. Попробуйте:

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

Еще лучше, используйте инструменты, которые предоставляет Beautifulsoup:

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

выдает список всех атрибутов src тегов img класса sizeProdImage.

0 голосов
/ 07 ноября 2017

В моем примере htmlText содержит тег img, но его можно использовать и для URL. Смотрите мой ответ здесь

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 голосов
/ 28 ноября 2011

Вы создаете объект re, затем передаете его в re.findall, который ожидает строку в качестве первого аргумента:

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

Вместо этого используйте метод .findall объекта patImgSrcВы только что создали:

patImgSrc = re.compile('src="(.*)".*/>')
findPatImgSrc = patImgSrc.findall(imgsrc)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...