带有特定标记的PHP DOM html问题

带有特定标记的PHP DOM html问题,php,html,domdocument,Php,Html,Domdocument,ppl。我经常在网上和stackoverflow上找到我的答案,但这一次无法解决我的问题。 我正在使用PHPDOM解析一个网站并从中提取一些数据,但出于某种原因,我尝试的所有方法都会返回比页面上数字更少的项目 尝试使用“简单php简单html dom”、“php高级html dom”和本机php dom。。。但在这种情况下,仍然可以得到14个物品标签 在这个网站上有28个标记为“article”的元素,但我总是得到14个(或更少) 尝试使用经典的发现(从简单和先进),与所有可能的组合;对于本机

ppl。我经常在网上和stackoverflow上找到我的答案,但这一次无法解决我的问题。 我正在使用PHPDOM解析一个网站并从中提取一些数据,但出于某种原因,我尝试的所有方法都会返回比页面上数字更少的项目

尝试使用“简单php简单html dom”、“php高级html dom”和本机php dom。。。但在这种情况下,仍然可以得到14个物品标签

在这个网站上有28个标记为“article”的元素,但我总是得到14个(或更少)

尝试使用经典的发现(从简单和先进),与所有可能的组合;对于本机,查询xpath和getelementsbytag

$xpath->query('//article');
$xpath->query('//*[@id="listNews"]/article[6]') //even this don't work
$html->find('article:not(.sec_mas_vistas_emol), article'); //return 14
所以我猜是我加载url的方式。。。所以我尝试了经典的“file\u get\u html”、curl和一些自定义函数。。。它们都是一样的。 更重要的是,如果我使用在线xpath测试仪,复制所有html并使用“query->”('//article')…它可以找到所有内容。 这是我最后的两项测试:

//Way 1
$html = file_get_html('http://www.emol.com/movil/nacional/');
$lidata = $html->find('article');

//Way 2
$url = 'http://www.emol.com/movil/nacional';
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$e = curl_exect($ch);
$dom = new DOMDocument;
@$dom->loadHTML($e); //tryed with loadHTMLFile too and the libxml_use_internal_erros
$xpath = new DOMXPath($dom);
$xpath->query('//article');

有什么建议可以解决这个问题吗?事实上,这是我第一次使用PHP dom,所以可能我遗漏了一些东西。

也许我上面的评论和这个示例可以帮助您继续

使用phpcasperjs包装器:

<?php 

require_once 'vendor/autoload.php';

use Browser\Casper;

$casper = new Casper();
$casper->start('http://www.emol.com/movil/nacional/');
$casper->wait(5000);
$output = $casper->getOutput();
$casper->run();
$html = $casper->getHtml();
$dom = new DOMDocument('1.0', 'UTF-8');
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);

$cnt = 1;
foreach ($xpath->query('//article') as $article) {
    print $cnt . ' - ' . $article->nodeName . ' - ' . $article->getAttribute('id') . "\n";
    $cnt += 1;
}

在提供的链接上只有14篇文章元素。我同意@marcell的观点。该页面上只有14篇文章nop,30。检查inspector,easy way find=>Nope,如果您查看该页面上的源代码,将有14篇文章。这就是您从php获取页面时得到的结果,这就是为什么您只得到14篇文章。尝试了吗你自己。你可以使用一个无头broswer来获取动态数据。这个库有一个导航脚本和测试工具,用于PhantomJS(WebKit)和SlimerJS(Gecko)无头浏览器,用Javascript编写。非常感谢,但不确定是否在我想要实现它的地方工作。无论如何,这是我继续的一个很好的指南。欢迎您。另外请注意,在您尝试上面的脚本之前,您必须安装并:
npm install-g phantomjs
npm install-g casperjs
<?php

$html = file_get_contents('http://www.emol.com/movil/nacional/');
$dom = new DOMDocument('1.0', 'UTF-8');
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);

$cnt = 1;
foreach ($xpath->query('//article') as $article) {
    print $cnt . ' - ' . $article->nodeName . ' - ' . $article->getAttribute('id') . "\n";
    $cnt += 1;
}