2009-03-20 1 views
2

Я новичок в регулярных выражениях и тому подобное. У меня мало знаний, и я думаю, что моя текущая проблема связана с ними.Как найти URL-адрес на странице

У меня есть веб-страница, содержащая текст. Я хочу получить ссылки с веб-страницы, которые находятся только в SPAN с, которые имеют class="img".

Я прохожу через эти шаги.

  1. захватить все SPAN с тегом классом «IMG» (это трудный шаг, который я ищу)
  2. ход эти SPAN S к новым переменным
  3. Разбирают переменный, чтобы получить массив со ссылками (Каждый SPAN имеет только 1 ссылку, так что это будет легко)

Я использую PHP, но и любой другой язык не имеет значения, я смотрю, как иметь дело с первым шаг. У кого-нибудь есть предложение? спасибо: D

ответ

12

Использование ПГПС DOMDocument -класса в сочетании с DOMXPath -класса, чтобы перейти к элементам, которые необходимо, как это:

<?php 
$dom = new DOMDocument(); 
$dom->loadHTML(file_get_contents(' http://foo.bar ')); 
$xpath = new DOMXPath($dom);

$elements = $xpath->query("/html/body//span[@class='img']//a"); foreach ($elements as $a) { echo $a->getAttribute('href'), "\n"; }

You can learn more about the XPath Language on the W3C page.

+0

+1 Согласен, скребок страницы намного веселее с разбором DOM в отличие от регулярных выражений. – karim79

+0

+1 хотя он будет работать только на хорошо оформленных документах XHTML. – vartec

+0

Спасибо, я просто знал, как полезен Xpath :) –

1

Узор как <span.* class="img".*>([^<]*)</span> должен работаем нормально. Предполагая, что ваш код выглядит примерно так

<span class="img">http://www.img.com/img.jpg</span> 
<span alt="yada" class="img">animage.png</span> 
<span alt="yada" class="img" title="still works">link.txt</span> 
<span>not an img class</span> 


<?php 

$pattern = '@<span.* class="img".*>([^<]*)</span>@i'; 

//$subject = html code above 

preg_match_all($pattern, $subject, $matches); 

print_r($matches); 

?> 
+0

это показывает полный диапазон :) в любом случае это хорошая отправная точка Я решил работать с этим, потому что безопаснее, если моя страница не загружается полностью: D –

+0

Я думаю, что $ matches [0] будет содержать полный матч (например, ), но $ matches [1] будет содержать первое захваченное выражение: бит внутри

+0

Я настоятельно рекомендую использовать регулярное выражение, читать запись в блоге для более ... –

1

I'm using PHP, but any other language doesn't matter, I'm looking how to deal with the first step. Any one have a suggestion?

Мы-э-флигель ...

import urllib 
from BeautifulSoup import BeautifulSoup, SoupStrainer 

html = urllib.urlopen(url).read() 
sieve = SoupStrainer(name='span', attrs={'class': 'img'}) 
tag_soup = BeautifulSoup(html, parseOnlyThese=sieve) 
for link in tag_soup('a'): 
    print link['href'] 

(это питон, используя BeautifulSoup - должен работать на большинстве douments, хорошо сформированным или нет).

+0

вы получаете ссылки из этого «супа», я посмотрю, если что-то похожее на PHP, это очень полезно –