【问题标题】:DOMXPath in PHP return empty stringsPHP中的DOMXPath返回空字符串
【发布时间】:2019-05-27 20:18:56
【问题描述】:

我正在使用 xpath 进行网页抓取。我可以从某些网站(雅虎等)获得​​预期结果,但我无法在特定页面获取数据。我只得到空字符串。我的问题是什么?

 $html = file_get_contents('http://finance.naver.com/item/frgn.nhn?code=005930');
 $doc = new DOMDocument();
 libxml_use_internal_errors(TRUE);  

 if(!empty($html)){ 

     @$doc->loadHTML($html);
     libxml_clear_errors(); 
     $xpath = new DOMXPath($doc);        

     $row = $xpath->query('//span[@class="tah p10 gray03"]') ;      

     if($row->length > 0) {

            foreach($row as $v){

                $stock[] = $v->nodeValue  ; 

            }     

           var_dump($stock) ;

        } 
}
  • 网址内容:2018.12.28

  • 预期结果:2018.12.28等

  • 实际结果:array(20) {[0]=>string(0) ""[1]=>string(0) ""[2]=>string(0) ""[3] =>字符串(0) ""[4]=>字符串(0) ""[5]=>字符串(0) ""[6]=>字符串(0) ""[7]=>字符串(0) ""[8]=>字符串(0) ""[9]=>字符串(0) ""[10]=>字符串(0) ""[11]=>字符串(0) ""[12]= >字符串(0) ""[13]=>字符串(0) ""[14]=>字符串(0) ""[15]=>字符串(0) ""[16]=>字符串(0) " "[17]=>string(0) ""[18]=>string(0) ""[19]=>string(0) "" }

【问题讨论】:

标签: php xpath


【解决方案1】:

我不知道 PHP,但我发现它是 may be a bug - 所以你需要对你的 $html 进行 UTF-8 编码。

我在您的第一行之后添加了以下行:

$html = mb_convert_encoding($html, 'HTML-ENTITIES', "UTF-8");

它将$html 转换为UTF-8。之后我可以看到结果:

array(20) {
  [0]=>
  string(10) "2018.12.28"
  [1]=>
  string(10) "2018.12.27"
...

【讨论】:

  • 感谢您的建议。现在它起作用了。 (相同的url但不同的页面设置UTF-8)
猜你喜欢
  • 2014-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多