0

我想使用简单的 HTML dom 类从 HTML 页面中跳过某些重复的内容。假设您可以在此链接上看到: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>

谢谢你。

4

2 回答 2

0

不确定我是否 100% 理解您的问题,但是......

您可以使用数组跟踪所有网址吗?

$outputedUrls = array();

当您回显网址时,将它们推送到数组中。但是,在回显它们之前,您应该检查 $outputedUrls 中是否不存在该 url。

if (!in_array($url, $outputedUrls)) {
    echo $url;
    $outputedUrls[] = $url;
}
于 2014-06-22T13:03:50.947 回答
0

如果您想获得/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
)
于 2014-06-22T13:13:49.040 回答