使用Goute PHP在嵌套的div类中获取内容

问题描述 投票:0回答:1

抱歉英文不好。所以我想从网站上删除一些内容,但div类是嵌套的,让我感到困惑。

基本上结构是:

<div id="gsc_vcd_table">
  <div class="gs_scl">
    <div class="gsc_vcd_field">
      Pengarang
    </div>
    <div class="gsc_vcd_value">
      I Anggara Wijaya, Djoko Budiyanto Setyohadi
    </div>
  </div>
  <div class="gs_scl">
    <div class="gsc_vcd_field">
      Tanggal Terbit
    </div>
    <div class="gsc_vcd_value">
      2017/3/1
    </div>
  </div>
</div>

我想从作者字段获取文本I Anggara Wijaya,Djoko Budiyanto Setyohadi,并从发布日期字段获得2017/3/1。

$crawlerdetail=$client->request('GET',$detail);
   $detailscholar=$crawlerdetail->filter('div.gsc_vcd_table');
   foreach ($detailscholar as $key) 
   {
        $keyCrawler=new Crawler($key);
        $pengarang=($scCrawler->filter('div.gsc_vcd_value')->count()) ? $scCrawler->filter('div.gsc_vcd_value')->text() : '';
        echo $pengarang;
   }

请帮帮我。

php laravel domcrawler
1个回答
0
投票

如果你想使用SimpleXMLElement类。

看到这段代码:

<?php
$string = <<<XML
<div id="gsc_vcd_table">
  <div class="gs_scl">
    <div class="gsc_vcd_field">
      Pengarang
    </div>
    <div class="gsc_vcd_value">
      I Anggara Wijaya, Djoko Budiyanto Setyohadi
    </div>
  </div>
  <div class="gs_scl">
    <div class="gsc_vcd_field">
      Tanggal Terbit
    </div>
    <div class="gsc_vcd_value">
      2017/3/1
    </div>
  </div>
</div>
XML;

$xml = new SimpleXMLElement($string);

$result1 = $xml->xpath("//div[contains(@class, 'gsc_vcd_field')]");
$result2 = $xml->xpath("//div[contains(@class, 'gsc_vcd_value')]");

foreach ($result1 as $key => $node) {
    echo "FIELD: $result1[$key] , VALUE: $result2[$key]<br>\n";
}

而且对于获取任何元素的xpath模式,您可以在chrome中使用inspect,并使用Copy XPath。

另一个解决方案是使用preg_match_all,请参阅:

preg_match_all('/<div class="gsc_vcd_field">\r\n(.*?)\r\n.*<\/div>\r\n.*<div class="gsc_vcd_value">\r\n(.*?)\r\n.*<\/div>/', $string, $matches);

foreach ($matches[1] as $key => $match) {
    echo "FIELD: " . $matches[1][$key] . " , VALUE: " . $matches[2][$key] . "<br>\n";
}
© www.soinside.com 2019 - 2024. All rights reserved.