Как найти URL на странице - PullRequest
2 голосов
/ 20 марта 2009

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

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

Я делаю все эти шаги.

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

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

Ответы [ 3 ]

12 голосов
/ 20 марта 2009

Используйте PHP DOMDocument -класс в сочетании с DOMXPath -классом для перехода к нужным элементам, например:

<?php $dom = new DOMDocument(); $dom->loadHTML(file_get_contents('<a href="http://foo.bar" rel="nofollow noreferrer">http://foo.bar</a>')); $xpath = new DOMXPath($dom);</p> <p>$elements = $xpath->query("/html/body//span[@class='img']//a"); foreach ($elements as $a) { echo $a->getAttribute('href'), "\n"; }

Подробнее о языке XPath можно узнать на странице W3C.

1 голос
/ 20 марта 2009

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

We-е-флигель ...

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

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

1 голос
/ 20 марта 2009

Шаблон типа <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);

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...