Как пропустить повторяющийся контент из поиска с помощью простого HTML-парсера DOM
Я хочу пропустить определенный повторяющийся контент со страницы HTML, используя простой класс HTML dom. Предположим, как вы видите по этой ссылке: http://www.gutenberg.org/wiki/Category:Agriculture_Bookshelf
Forestry
приходит 2 раза.
Один в верхней части имени SD Forestry
и ниже только Forestry
, Так что у них обоих одинаковые ссылки: /wiki/Forestry
что создает много проблем для меня.
Теперь, когда я повторяю это в цикле foreach, используя: $subhtml->find('a[href^="/wiki/"]')
он находит все эти ссылки со страницы и имеет такую ссылку, но я хочу, чтобы уникальные ссылки означали только повторения в них.
На этой же странице ищите Horticulture
а также Horticulture (Bookshelf)
обе они имеют одинаковые ссылки, такие как: /wiki/Horticulture_(Bookshelf)
, Но я хочу рассматривать их как один раз, поэтому функция или определенный фрагмент кода PHP пропускают повторяющуюся часть содержимого HTML.
Так когда find
Функция запускается, она будет просто пропускать повторяющиеся и обрабатывать их только как единичные.
Вот HTML-код:
<div id="content">
<div id="bodyContent">
<div id="contentSub"> </div>
<div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr">
<p>LoC classification S <a href="/w/index.php?title=Agriculture&action=edit&redlink=1" class="new" title="Agriculture (page does not exist)">Agriculture</a> 32863 </p>
<ul>
<li> Conservation </li>
<li> SB <a href="/w/index.php?title=Plant_culture&action=edit&redlink=1" class="new" title="Plant culture (page does not exist)">Plant culture</a> </li>
<li> sb 300 <a href="/wiki/Horticulture_(Bookshelf)" title="Horticulture (Bookshelf)">Horticulture</a> </li>
<li> SD <a href="/wiki/Forestry" title="Forestry">Forestry</a> </li>
<li> SF <a href="/w/index.php?title=Animal_culture&action=edit&redlink=1" class="new" title="Animal culture (page does not exist)">Animal culture</a> </li>
<li> SF 600 <a href="/w/index.php?title=Veterinary_medicine&action=edit&redlink=1" class="new" title="Veterinary medicine (page does not exist)">Veterinary medicine</a> </li>
<li> SH <a href="/w/index.php?title=Aquaculture&action=edit&redlink=1" class="new" title="Aquaculture (page does not exist)">Aquaculture</a> </li>
<li> SK <a href="/w/index.php?title=Hunting_%26_fishing&action=edit&redlink=1" class="new" title="Hunting & fishing (page does not exist)">Hunting & fishing</a> </li>
</ul>
<div lang="en" dir="ltr">
<div id="mw-pages">
<h2> </h2>
<div lang="en" dir="ltr" class="mw-content-ltr">
<h3>F</h3>
<ul>
<li><a href="/wiki/Forestry" title="Forestry">Forestry</a></li>
</ul>
<h3>H</h3>
<ul>
<li><a href="/wiki/Horticulture_(Bookshelf)" title="Horticulture (Bookshelf)">Horticulture (Bookshelf)</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
Спасибо.
2 ответа
Если вы хотите получить URL с /wiki/
без дубликатов, просто наведите их на якорь a
тогда просто необходим простой цикл. Рассмотрим этот пример:
include 'simple_html_dom.php';
$urls = array();
$url = 'http://www.gutenberg.org/wiki/Category:Agriculture_Bookshelf';
$html = file_get_html($url);
foreach($html->find('a') as $key => $value) {
if(strpos($value->href, '/wiki/') !== false && strpos($value->href, '/wiki/Category:') === false) {
$urls[urldecode($value->href)] = $key;
}
}
$urls = array_values(array_flip($urls));
echo '<pre>';
print_r($urls);
Пример вывода:
Array
(
[0] => /wiki/Horticulture_(Bookshelf)
[1] => /wiki/Forestry
[2] => /wiki/Special:Categories
[3] => /wiki/Main_Page
[4] => /wiki/Gutenberg:Contact_Information
[5] => /wiki/Gutenberg:Project_Gutenberg_Needs_Your_Donation
[6] => /wiki/Gutenberg:Privacy_policy
[7] => /wiki/Gutenberg:About
[8] => /wiki/Gutenberg:General_disclaimer
)
Не уверен, что я понимаю ваш вопрос на 100%, но....
Можете ли вы отслеживать все URL с помощью массива?
$outputedUrls = array();
Когда вы отобразите URL-адреса, вставьте их в массив. Но, прежде чем их выводить, вы должны убедиться, что URL-адрес не существует в $outputedUrls.
if (!in_array($url, $outputedUrls)) {
echo $url;
$outputedUrls[] = $url;
}