【问题标题】:PHP DOMDocument Scraping nested classPHP DOMDocument 抓取嵌套类
【发布时间】:2020-07-22 20:13:12
【问题描述】:

我有这样的 HTML 文档 我想 scrape 所有类别和子类别,我尝试使用 DOMXpath 进行抓取并加载文档 html,然后过滤类“css-1qaqbbz”(但只获取类别),这是我预期的数组这个

[

'Arsitektur & Desain' => [

“布库班古南”,

“Buku 代码和标准”

//等等...

],

]

     <div>
        <a class="css-1qaqbbz">Arsitektur &amp; Desain
        </a>
     </div>
     <div class="css-1wode1h">
        <a data-testid="categoryNavigation#1" class="css-1nykm5o">Buku Bangunan</a>
        <a data-testid="categoryNavigation#2" class="css-1nykm5o">Buku Codes &amp; Standars</a>
        <a data-testid="categoryNavigation#3" class="css-1nykm5o">Buku Dekorasi &amp; Ornamen</a>
        <a data-testid="categoryNavigation#4" class="css-1nykm5o">Buku Desain Dapur</a>
        <a data-testid="categoryNavigation#5" class="css-1nykm5o">Buku Desain Kamar</a>
        <a data-testid="categoryNavigation#6" class="css-1nykm5o">Buku Desain Ruang Keluarga</a>
        <a data-testid="categoryNavigation#7" class="css-1nykm5o">Buku Desain Ruang Tamu</a>
        <a data-testid="categoryNavigation#8" class="css-1nykm5o">Buku Desain Rumah</a>
        <a data-testid="categoryNavigation#9" class="css-1nykm5o">Buku Interior &amp; Eksterior</a>
        <a data-testid="categoryNavigation#10" class="css-1nykm5o">Buku Metode &amp; Material Bangunan</a>
        <a data-testid="categoryNavigation#11" class="css-1nykm5o">Buku Taman</a>
     </div>
    
    
    <div class="css-1owj1eu" data-testid="catNavigation#2">
        <div>
            <a class="css-1qaqbbz">Buku Hukum</a>
        </div>
        <div class="css-1wode1h">
            <a data-testid="categoryNavigation#1"  class="css-1nykm5o">Buku Gender &amp; Hukum</a>
            <a data-testid="categoryNavigation#2"  class="css-1nykm5o">Buku Hukum Dagang</a>
            <a data-testid="categoryNavigation#3"  class="css-1nykm5o">Buku Hukum Internasional</a>
            <a data-testid="categoryNavigation#4"  class="css-1nykm5o">Buku Hukum Perdata</a>
            <a data-testid="categoryNavigation#5"  class="css-1nykm5o">Buku Hukum Pidana</a>
            <a data-testid="categoryNavigation#6" class="css-1nykm5o">Buku Kemanusiaan</a>
            <a data-testid="categoryNavigation#7"  class="css-1nykm5o">Buku Politik &amp; Hukum</a>
            <a data-testid="categoryNavigation#8" class="css-1nykm5o">Kumpulan Peraturan Perundang-Undangan</a>
            <a data-testid="categoryNavigation#9" class="css-1nykm5o">UUD 1945</a></div>
    </div>

这是我要抓取的源代码

$dom = new \DOMDocument;
$dom->loadHTML($f);
$xpath = new DOMXPath($dom);
$results = $xpath->query("//*[@class='css-1qaqbbz']");


if ($results->length > 0) {
echo "<pre>";
    $arrCats = []
    foreach ($results as $key => $value) {
    $arrCats[] = $value->nodeValue;

    }
// die;
}

【问题讨论】:

  • 嗨,亲爱的 Roby,感谢这个很好的例子 - 我喜欢它的清晰结构!!

标签: php laravel dom xpath web-scraping


【解决方案1】:

只需更改您的 XPath 查询:

$results = $xpath->query("//a[starts-with(@class,'css')]");

输出:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 2021-07-01
    • 2013-04-29
    • 1970-01-01
    相关资源
    最近更新 更多