【问题标题】:Some data loss when using explode in php在php中使用explode时一些数据丢失
【发布时间】:2015-06-15 14:28:17
【问题描述】:

我想从外部页面解析一些数据(游戏名称): https://www.mol.com/Product/GamesHive

使用此代码:

<?php
    $url = 'https://www.mol.com/Product/GamesHive';
    $content = file_get_contents($url);
    $first_step = explode('<div class="col-xs-4">', $content);
    $second_step = explode('</div>', $first_step[1]);
    echo $second_step[0];
?>

但是有些数据丢失了。原始页面有384 项目,我的页面只有169 项目。有什么问题?

【问题讨论】:

  • 因为某些元素可能包含额外的classid
  • 问题是当&lt;/div&gt;&lt;div class="col-xs-4"&gt; 发现将被删除。
  • 不要在 html 上使用这样的字符串操作。并非所有的“col-xs-4”标签都是这样的,例如&lt;div class="col-xs-4 xs-margin-bottom-40"&gt; 会被你的爆炸遗漏。使用 DOM 解析器和 xpath 来获取您想要的任何内容。
  • 我认为结果和用户国家有关系!

标签: php jquery html explode


【解决方案1】:

这是您想要实现的目标吗?

<?php

$curl = curl_init();

curl_setopt_array($curl,
    array(
        CURLOPT_URL              => 'https://www.mol.com/Product/GamesHive',
        CURLOPT_RETURNTRANSFER   => TRUE,
        CURLOPT_SSL_VERIFYHOST   => 0,
        CURLOPT_SSL_VERIFYPEER   => FALSE
    )
);

$response = curl_exec($curl);

curl_close($curl);

$arr = simplexml_import_dom(@DOMDocument::loadHTML($response))
         ->xpath('//div[@class="caption"]');

foreach ($arr as $val)
{
    echo $val->h5->a . '<br />';   
}

?>

【讨论】:

  • 你能再打开代码吗?至少有一些cmets会很好。 VERIFYPEER/VERIFYHOST =&gt; false 也被认为是不好的做法。
猜你喜欢
  • 2015-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多