loadHTML 返回空,html 没问题
loadHTML returning empty, html is fine
我正在尝试使用 PHP 获取元素的 href 值,但我遇到了一些问题。这是我的代码片段。
<?php
ini_set("log_errors", 1);
ini_set("error_log", "php-error.log");
$target_url = "http://foo.bar";
$request = $target_url;
$html = $this->scraper($request);
$dom = new DOMDocument();
$dom->loadHTML($html);
// Error point - $dom is empty
error_log("dom:");
error_log($dom);
$xpath = new DOMXPath($dom);
error_log("setting target url");
$target_url = $xpath->query("//*[@class='foo_bar']/href");
?>
记录 $html 会生成页面的标准、完整 HTML 输出。搜索显示我的 xpath 应该可以工作。但是,当我尝试在加载 HTML 后记录 $dom 时,我得到一个空白结果。我已经苦苦挣扎了几个小时,试图找出原因,但没有成功。
有没有人有任何ideas/anything我可以试试?
编辑以添加控制台输出:
[30-Sep-2015 13:51:59 America/New_York] dom:
[30-Sep-2015 13:51:59 America/New_York] setting target url
您应该检查 HTML 是否已加载到 DOM 中。您可以为此使用调试器、日志记录或 var_dump()。
var_dump($dom->saveXml());
如果它没有加载到 DOM 后退一步并验证 HTML 是否被抓取。
var_dump($html);
如果 HTML 已加载到 DOM 中,您仍然需要修复 Xpath。我希望 href
是一个属性节点。
//*[@class='foo_bar']/@href
您似乎想将其作为字符串值读取,因此将其转换为:
string(//*[@class='foo_bar']/@href)
这只适用于 DOMXpath::evaluate()
,DOMXpath::query()
只能 return 个节点列表。
$target_url = $xpath->evaluate("string(//*[@class='foo_bar']/@href)");
一个小例子:
$document = new DOMDocument();
$document->loadHtml('<a href="http://example.com">Example</a>');
$xpath = new DOMXpath($document);
var_dump($xpath->evaluate('string(//a[1]/@href)'));
输出:
string(18) "http://example.com"
我正在尝试使用 PHP 获取元素的 href 值,但我遇到了一些问题。这是我的代码片段。
<?php
ini_set("log_errors", 1);
ini_set("error_log", "php-error.log");
$target_url = "http://foo.bar";
$request = $target_url;
$html = $this->scraper($request);
$dom = new DOMDocument();
$dom->loadHTML($html);
// Error point - $dom is empty
error_log("dom:");
error_log($dom);
$xpath = new DOMXPath($dom);
error_log("setting target url");
$target_url = $xpath->query("//*[@class='foo_bar']/href");
?>
记录 $html 会生成页面的标准、完整 HTML 输出。搜索显示我的 xpath 应该可以工作。但是,当我尝试在加载 HTML 后记录 $dom 时,我得到一个空白结果。我已经苦苦挣扎了几个小时,试图找出原因,但没有成功。
有没有人有任何ideas/anything我可以试试?
编辑以添加控制台输出:
[30-Sep-2015 13:51:59 America/New_York] dom:
[30-Sep-2015 13:51:59 America/New_York] setting target url
您应该检查 HTML 是否已加载到 DOM 中。您可以为此使用调试器、日志记录或 var_dump()。
var_dump($dom->saveXml());
如果它没有加载到 DOM 后退一步并验证 HTML 是否被抓取。
var_dump($html);
如果 HTML 已加载到 DOM 中,您仍然需要修复 Xpath。我希望 href
是一个属性节点。
//*[@class='foo_bar']/@href
您似乎想将其作为字符串值读取,因此将其转换为:
string(//*[@class='foo_bar']/@href)
这只适用于 DOMXpath::evaluate()
,DOMXpath::query()
只能 return 个节点列表。
$target_url = $xpath->evaluate("string(//*[@class='foo_bar']/@href)");
一个小例子:
$document = new DOMDocument();
$document->loadHtml('<a href="http://example.com">Example</a>');
$xpath = new DOMXpath($document);
var_dump($xpath->evaluate('string(//a[1]/@href)'));
输出:
string(18) "http://example.com"