在嵌套的PHP foreach循环中刮取输出

塞巴斯蒂安

我正在尝试使用DOM抓取这种格式的链接列表:

<h2 class="h2"><a href="this-is-a-link">List item 1</a></h2>
<h2 class="h2"><a href="this-is-another-link">List item 2</a></h2>
<h2 class="h2"><a href="and-another">List item 3</a></h2>

我需要将PHP的内容<h2>(例如“列表项1”)和随附内容href(例如“ this-is-a-link”)都作为变量。

我可以使用一个foreach循环分别刮取每个图像,但是一旦尝试通过嵌套foreach循环同时打印两个图像,每个图像都会<h2>重复多次。

我是在正确的轨道上,还是有更好的方法来解决此问题?

编辑

我应该说,我正在抓取各种各样的网站,其中一些网站具有上面的格式,但是对于其他网站,<a>则是其他位置,例如在包含div的位置。

这是我的代码:

    function jobscrape($name, $url, $jobpage_url_root, $job_title_location, $job_title_url_location, $job_text) {

    echo "<h3>".$name."</h3>";

    // CREATE NEW DOM DOCUMENT BASED ON JOBLIST URL
    $html = file_get_contents($url);
    $doc = new DOMDocument();
    libxml_use_internal_errors(TRUE);

    // CHECK IF ANY HTML IS RETURNED (I.E. IF ABOVE HAS WORKED)
    if(!empty($html)) {

        // LOAD HTML INTO DOM DOCUMENT, CREATE NEW XPATH AND SET VARIABLE FOR THE JOB TITLE LOCATION
        $doc->loadHTML($html);
        libxml_clear_errors(); // remove errors for yucky html
        $xpath = new DOMXPath($doc);

// LOOP THROUGH JOBS LIST
        $row = $xpath->query("$job_title_location");
        // CHECK IF THERE ARE ANY ROWS MATCHING THE ABOVE LOCATION
        if ($row->length > 0) {
            // PULL THOSE ROWS INTO AN ARRAY
            foreach ($row as $jobpage_titles) {
                // SET THE JOBPAGE TITLE VARIABLE
                $jobpage_title = $jobpage_titles->nodeValue;
                // echo $jobpage_title."<br>";

// LOOP THROUGH JOBS PAGE URLS
                $row2 = $xpath->query("$job_title_url_location");
                // CHECK IF THERE ARE ANY ROWS MATCHING THE ABOVE LOCATION
                if ($row2->length > 0) {
                    //echo $jobpage_title." - hello<br>";
                    // PULL THOSE ROWS INTO AN ARRAY
                    foreach ($row2 as $jobpage_urls) {
                        // TRY TO PRINT VARIABLE FROM BEFORE
                        $href = $jobpage_url_root.$jobpage_urls->attributes->getNamedItem('href')->value;
                        echo "<a href='".$href."'>".$jobpage_title."</a><br>";
                    }
                }
            }
        }
    }
}

我的输出是为每个URL一次打印每个列表元素,例如:

<h2 class="h2"><a href="this-is-a-link">List item 1</a></h2>
<h2 class="h2"><a href="this-is-another-link">List item 1</a></h2>
<h2 class="h2"><a href="and-another">List item 1</a></h2>

<h2 class="h2"><a href="this-is-a-link">List item 2</a></h2>
<h2 class="h2"><a href="this-is-another-link">List item 2</a></h2>
<h2 class="h2"><a href="and-another">List item 2</a></h2>

<h2 class="h2"><a href="this-is-a-link">List item 3</a></h2>
<h2 class="h2"><a href="this-is-another-link">List item 3</a></h2>
<h2 class="h2"><a href="and-another">List item 3</a></h2>

只是更大的规模,因为我要抓三件以上的东西。

罗比·麦卡利斯特(Robbie McAlister)

在这种情况下,您可能不需要嵌套foreach循环。由于您获得的是元素的href属性和同一元素的文本节点,因此可以在循环中以相同的迭代方式完成此过程,而无需嵌套。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

嵌套 foreach 循环中的匹配结果 - PHP

来自分类Dev

PHP-成对嵌套嵌套的foreach循环

来自分类Dev

在PHP中嵌套foreach循环

来自分类Dev

彼此嵌套的PHP foreach循环

来自分类Dev

在PHP中嵌套foreach循环

来自分类Dev

php foreach循环中的TIMESTAMPDIFF

来自分类Dev

在FOREACH循环中的PHP IF语句

来自分类Dev

PHP foreach 循环中的 HTML

来自分类Dev

如何在嵌套的foreach循环中求和?

来自分类Dev

PHP:foreach循环中的循环次数

来自分类Dev

PHP中的foreach循环中的while循环

来自分类Dev

PHP:在嵌套的foreach循环中找到最后一个项目?

来自分类Dev

PHP在foreach循环中将平面转换为嵌套的多维数组

来自分类Dev

PHP foreach与数组嵌套

来自分类Dev

PHP在数组上嵌套foreach循环

来自分类Dev

从嵌套的PHP foreach循环创建表

来自分类Dev

嵌套数组中的PHP foreach循环

来自分类Dev

PHP在数组上嵌套foreach循环

来自分类Dev

php - 同时继续嵌套的 foreach 循环

来自分类Dev

foreach循环嵌套数组json php

来自分类Dev

Php:嵌套循环无效

来自分类Dev

PHP优化嵌套循环

来自分类Dev

PHP优化嵌套循环

来自分类Dev

PHP嵌套循环错误

来自分类Dev

将嵌套在ForEach循环中的for循环转换为LINQ

来自分类Dev

PHP在while循环中输出记录-错误

来自分类Dev

php foreach循环中的jQuery脚本

来自分类Dev

PHP Foreach循环中的BOOTSTRAP表

来自分类Dev

[php]中的foreach循环中的总和