0

抱歉英语不好。所以我想从网站上删除一些内容,但是 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>

我想从 Pengarang 字段获取文本 I Anggara Wijaya, Djoko Budiyanto Setyohadi ,并从Tanggal Terbit字段获取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;
   }

请帮帮我。

4

1 回答 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 中使用检查,并复制 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";
}
于 2017-12-17T12:57:50.790 回答