Как пропустить повторяющийся контент из поиска с помощью простого синтаксического анализатора 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&amp;action=edit&amp;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&amp;action=edit&amp;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&amp;action=edit&amp;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&amp;action=edit&amp;redlink=1" class="new" title="Veterinary medicine (page does not exist)">Veterinary medicine</a> </li>
        <li> SH <a href="/w/index.php?title=Aquaculture&amp;action=edit&amp;redlink=1" class="new" title="Aquaculture (page does not exist)">Aquaculture</a> </li>
        <li> SK <a href="/w/index.php?title=Hunting_%26_fishing&amp;action=edit&amp;redlink=1" class="new" title="Hunting &amp; fishing (page does not exist)">Hunting &amp; fishing</a> </li>
      </ul>
      <div lang="en" dir="ltr">
        <div id="mw-pages">
          <h2>&nbsp;</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>

Спасибо.


person user3763688    schedule 22.06.2014    source источник


Ответы (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
)
person user1978142    schedule 22.06.2014
comment
Поэтому просто я хотел бы иметь URL-адреса как из верхнего, так и из нижнего HTML-кода без повторения. - person user3763688; 22.06.2014
comment
Я хотел сказать, что хочу иметь только и только уникальные URL-адреса в пределах /wiki/ - person user3763688; 22.06.2014
comment
Большое спасибо, у меня все работает нормально, но у меня есть и другие проблемы. пожалуйста, не могли бы вы пропустить этот вопрос: http://stackoverflow.com/questions/24346381/scrapping-code-is-not-working-as-expected-inserting-repeated-data-in-the-databa - person user3763688; 22.06.2014
comment
Это тоже моя главная проблема, с которой я сталкиваюсь с этим кодом. пожалуйста, помогите мне пройти через это. - person user3763688; 22.06.2014
comment
пожалуйста, еще одна проблема. с этого URL: http://www.gutenberg.org/wiki/Children%27s_Periodicals_(Bookshelf) У меня есть результат, из которого мне не нужны эти ссылки: [6] => /wiki/Category:Children%27s_Bookshelf [7] => /wiki/Category:Periodicals_Bookshelf [8] => /wiki/Category:General_Works_Bookshelf. Это также моя серьезная проблема, которую я пытался опубликовать в своем предыдущем вопросе. Я не хочу, чтобы эти ссылки были в моем коде, и я не хочу их обрабатывать. На каждой странице они разные. но все, что связано с /wiki/Category:......, должно быть исключено любой ценой со всех страниц. - person user3763688; 22.06.2014

Не уверен, понимаю ли я ваш вопрос на 100%, но....

Можете ли вы отслеживать все URL-адреса с помощью массива?

$outputedUrls = array();

Когда вы повторяете URL-адреса, вставляйте их в массив. Но прежде чем выводить их, вы должны убедиться, что URL-адрес не существует в $outputedUrls.

if (!in_array($url, $outputedUrls)) {
    echo $url;
    $outputedUrls[] = $url;
}
person slik    schedule 22.06.2014