Как получить <a> теги в <body>, но исключить разделы верхнего и нижнего колонтитула
Если у меня есть такая страница:
<body>
<header>
<a href='http://domain1.com'>link 1 text</a>
</header>
<a href='http://domain2.com'>link 2 text</a>
<footer>
<a href='http://domain3.com'>link 3 text</a>
</footer>
</body>
Как мне вытащить <a>
теги из <body>
но исключить ссылки из <header>
а также <footer>
?
На настоящей веб-странице будет много <a>
теги в <header>
поэтому я бы предпочел не циклически проходить через ВСЕ из них.
Я хочу вытащить URL-адреса и текст привязки из каждого из <a>
теги, которые НЕ находятся внутри <header>
или же <footer>
теги.
РЕДАКТИРОВАТЬ: вот как я нахожу ссылки в шапке:
$header = $html->find('header',0);
foreach ($header->find('a') as $a){
do something
}
Я хотел бы сделать это (обратите внимание на использование "!")
$foo = $html->find('!header,!footer');
foreach ($foo->find('a') as $a){
do something
}
3 ответа
Удалите верхний и нижний колонтитулы с DOM, с которым вы работаете, прежде чем искать ссылки.
<?php
include("simple_html_dom.php");
$source = <<<EOD
<body>
<header>
<a href='http://domain1.com'>link 1 text</a>
</header>
<a href='http://domain2.com'>link 2 text</a>
<a href='http://domain4.com'>link 4 text</a>
<footer>
<a href='http://domain3.com'>link 3 text</a>
</footer>
</body>
EOD;
$html = str_get_html($source);
foreach ($html->find('header, footer') as $unwanted) {
$unwanted->outertext = "";
}
$html->load($html->save());
$links = $html->find("a");
foreach ($links as $link) {
print $link;
};
?>
Не калеча телом? Вы могли бы сделать что-то вроде:
$bad_as = $html->find('header a, footer a');
foreach($html->find('a') as $a){
if(in_array($a, $bad_as)) continue;
// do something
}
Это не возможно с простым html-dom, просто, конечно. Вы не можете сделать это с simple-html-dom.
$html->find('body > a');
Этот Css селектор Выбирает все <a>
элементы, где родитель является <body>
элемент.
Вы должны пройти через дочерние узлы тела, а затем получить <a>
Я предлагаю посмотреть на Как вы анализируете и обрабатываете HTML/XML в PHP?
Со своей стороны я использую Symfony/DomCrawler и Symfony/CssSelector для этого.