Извлечь путь и имя файла изтег - PullRequest
1 голос
/ 29 января 2011

У меня есть исходный код какой-то веб-страницы, мне нужно найти все вхождения тега и извлечь имя и местоположение этой картинки (пример <img src="../images/test.jpg" /> Мне нужно path="../images/" и file="test.jpg")Как я могу сделать это с регулярными выражениями?

Ответы [ 3 ]

4 голосов
/ 29 января 2011

вы должны использовать lxml.html

>>> from urllib2 import urlopen
>>> from lxml import html
>>> page = urlopen('http://www.amazon.co.uk/')
>>> page_source = html.parse(page)
>>> from pprint import pprint
>>> pprint(page_source.xpath('//img/@src'))
['http://g-ecx.images-amazon.com/images/G/02/gno/images/orangeBlue/navPackedSprites-UK-15._V202471918_.png',
 'http://g-ecx.images-amazon.com/images/G/02/x-locale/common/transparent-pixel._V192199769_.gif',
 'http://g-ecx.images-amazon.com/images/G/02/x-locale/common/transparent-pixel._V192199769_.gif',
 'http://g-ecx.images-amazon.com/images/G/02/x-locale/common/transparent-pixel._V192199769_.gif',
 'http://g-ecx.images-amazon.com/images/G/02/uk-marketing/xmas10/janbargains/uk-january-bargains-loz75._V175451391_.gif',
 'http://g-ecx.images-amazon.com/images/G/02/UK-Shoe/email/7_jan_11-amzn-sale-loz-1._V173375114_.png',
 'http://g-ecx.images-amazon.com/images/G/02/uk-jw/homepage/uk-wtch-police-roto._V185455265_.png',
 'http://g-ecx.images-amazon.com/images/G/02/kindle/shasta/merch/gw/shasta-gw-bestselling-01a-470x265._V173993687_.jpg',
 'http://ecx.images-amazon.com/images/I/412wF8LJ-uL._SL135_.jpg',
 'http://ecx.images-amazon.com/images/I/51YC5H64AuL._SL135_.jpg',
 'http://ecx.images-amazon.com/images/I/41%2BdpTvM1FL._SL135_.jpg',
 'http://z-ecx.images-amazon.com/images/G/02/x-locale/common/transparent-pixel._V192234675_.gif',
 'http://z-ecx.images-amazon.com/images/G/02/x-locale/common/transparent-pixel._V192234675_.gif',
 'http://g-ecx.images-amazon.com/images/G/01/x-locale/common/transparent-pixel._V42752373_.gif',
 'http://z-ecx.images-amazon.com/images/G/02/x-locale/common/transparent-pixel._V192234675_.gif',
 'http://z-ecx.images-amazon.com/images/G/02/x-locale/common/transparent-pixel._V192234675_.gif',
 'http://g-ecx.images-amazon.com/images/G/02/x-locale/common/transparent-pixel._V192199769_.gif',
 'http://ecx.images-amazon.com/images/I/51-kiOR0NwL._SL135_.jpg',
 'http://ecx.images-amazon.com/images/I/51DRc-7HuxL._SL135_.jpg',
 'http://ecx.images-amazon.com/images/I/51SK5htD22L._SL135_.jpg',
 'http://z-ecx.images-amazon.com/images/G/02/x-locale/common/transparent-pixel._V192234675_.gif',
 'http://z-ecx.images-amazon.com/images/G/02/x-locale/common/transparent-pixel._V192234675_.gif',
 'http://z-ecx.images-amazon.com/images/G/02/x-locale/common/transparent-pixel._V192234675_.gif',
 'http://z-ecx.images-amazon.com/images/G/02/x-locale/common/transparent-pixel._V192234675_.gif',
 'http://ecx.images-amazon.com/images/I/31POT%2BzL1tL._SS120_RO10,1,201,225,243,255,255,255,15_.jpg',
 'http://ecx.images-amazon.com/images/I/41hkDkhjrTL._SS120_RO10,1,201,225,243,255,255,255,15_.jpg',
 'http://ecx.images-amazon.com/images/I/41zDYiAWasL._SS120_RO10,1,201,225,243,255,255,255,15_.jpg',
 'http://ecx.images-amazon.com/images/I/31HqB5H8j%2BL._SS120_RO10,1,201,225,243,255,255,255,15_.jpg',
 'http://g-ecx.images-amazon.com/images/G/02/uk-clothing/Lingerie/UK_APP_LingerieStore_50._V171062881_.png',
 'http://g-ecx.images-amazon.com/images/G/02/uk-pets/graphics/B000FVC1HE_50._V198692831_.jpg',
 'http://g-ecx.images-amazon.com/images/G/02/uk-grocery/images/illy_50._V198779066_.gif',
 'http://g-ecx.images-amazon.com/images/G/02/uk-electronics/MI_Store/UK_MIN_MILaunch_50._V191178779_.png',
 'http://g-ecx.images-amazon.com/images/G/02/uk-lighting/graphics/NoveltyLighting_50._V192237013_.jpg',
 'http://g-ecx.images-amazon.com/images/G/02/UK-Shoe/email/7_jan_11-amzn-sale-TCG-1._V173375108_.png',
 'http://g-ecx.images-amazon.com/images/G/02/gno/images/general/navAmazonLogoFooter._V192252709_.gif']
3 голосов
/ 29 января 2011

Вы не должны использовать регулярные выражения для анализа HTML по различным причинам, изложенным в этом ответе .Вы должны использовать HTML-парсер .

0 голосов
/ 29 января 2011

Есть несколько способов, вы можете использовать группы захвата

path=("[^"]+")

или синтаксис lookbehind

(?<=path=)"[^"]+" 

Возможно, есть и множество других альтернатив.В любом случае, как и в предыдущем упомянутом сообщении, вы, вероятно, должны использовать для этой работы анализатор HTML.Тем не менее, если вы используете регулярное выражение, вам, вероятно, нужно сначала извлечь теги img, а затем запустить один из приведенных выше регулярных выражений.

...