Как выполнить поиск по URL-адресу на странице
Вопрос
Я новичок в регулярных выражениях и тому подобных вещах.У меня очень мало знаний, и я думаю, что моя нынешняя проблема связана с ними.
У меня есть веб-страница, которая содержит текст.Я хочу получить ссылки с веб-страницы, которые находятся только в SPAN
ы, которые имеют class="img"
.
Я прохожу через эти шаги.
- захватите все
SPAN
s помечен классом "img" (это трудный шаг, который я ищу) - переместите эти
SPAN
s к новой переменной - Проанализируйте переменную, чтобы получить массив со ссылками (каждая
SPAN
имеет только 1 ссылку, так что это будет несложно)
Я использую PHP, но любой другой язык не имеет значения, я смотрю, как справиться с первым шагом.У кого-нибудь есть предложение?Спасибо : D
Решение
Используйте PHPs DOMDocument ДОМДокумент- класс в сочетании с DOMXPath ( Доменный путь )-класс для перехода к нужным вам элементам, вот так:
<?php
$dom = new DOMDocument();
$dom->loadHTML(file_get_contents('http://foo.bar'));
$xpath = new DOMXPath($dom);
$elements = $xpath->запрос("/html/body//span[@class='img']//a");foreach ($elements как $a)
{
echo $a-> Получить атрибут('href'), "
";}
Другие советы
Шаблон , подобный <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);
?>
Я использую PHP, но любой другой язык не имеет значения, я ищу, как справиться с первым шагом.У кого-нибудь есть предложение?
Ве-е-элл...
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, использующий Прекрасный суп - должно работать на большинстве доументов, хорошо сформированных или нет).