代码之家  ›  专栏  ›  技术社区  ›  sh33pS0ldat

我如何从网站上获得一个特定的div?[副本]

  •  0
  • sh33pS0ldat  · 技术社区  · 7 年前

    我正在尝试获取特定的div元素(即带有属性 id="vung_doc" )从一个网站,但我几乎得到了每一个元素。你知道怎么了吗?

    $doc = new DOMDocument;
    
    // We don't want to bother with white spaces
    $doc->preserveWhiteSpace = true;
    
    // Most HTML Developers are chimps and produce invalid markup...
    $doc->strictErrorChecking = false;
    $doc->recover = true;
    
    $doc->loadHTMLFile('http://lightnovelgate.com/chapter/epoch_of_twilight/chapter_300');
    
    $xpath = new DOMXPath($doc);
    
    $query = "//*[@class='vung_doc']";
    
    
    $entries = $xpath->query($query);
    var_dump($entries->item(0)->textContent);
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   Sᴀᴍ Onᴇᴌᴀ    7 年前

    具有价值的属性 部门 要素

    <div id="vung_doc" class="vung_doc" style="font-size: 18px;">
        <p></p>
        "Mayor song..."
    

    如果你想把这些段落分开,你可以使用 preg_split() 要在任何新行字符上拆分:

    $entries = $xpath->query($query);
    
    foreach($entries as $entry) {
        $paragraphs = preg_split("/[\r\n]+/s",$entry->textContent);
        foreach($paragraphs as $paragraph) {
            if (trim($paragraph)) {            
                echo '<b>paragraph:</b> '.$paragraph;
                break;
            }
        }
    }
    

    请参见演示 in this playground example libxml_use_internal_errors() 调用,以抑制XML错误:

    libxml_use_internal_errors(true);
    

    目标的屏幕截图 添加了大纲的元素:

    screenshot

        2
  •  0
  •   Halfstop    7 年前

    改变

    $query = "//*[@class='vung_doc']";
    

    $query = "//*[@id='vung_doc']";