【发布时间】:2014-08-14 03:53:27
【问题描述】:
我正在使用 DomDocument 从页面上的特定 div 中提取内容。
然后我想用http://example.com/test.php 替换路径等于http://example.com/test/ 的所有链接实例。
$url = "http://pugetsoundbasketball.com/stackoverflow_sample.php";
$doc = new DomDocument('1.0', 'UTF-8');
$doc->loadHtml(file_get_contents($url));
$div = $doc->getElementById('upcoming_league_dates');
foreach ($div->getElementsByTagName('a') as $item) {
$item->setAttribute('href', 'http://example.com/test.php');
}
echo $doc->saveHTML($div);
正如您在上面的示例中看到的那样,str_replace causes 在我使用getElementById 定位到即将到来的_league_dates div 后出现问题。我明白这一点,但不幸的是我不知道从哪里开始!
我尝试了几种不同的方法,包括在getElementById 函数上方执行str_replace(我想我可以先替换字符串,然后针对特定的div),但没有成功。
我在这里错过了什么?
编辑:更新代码以显示工作解决方案
【问题讨论】:
-
看起来该网页有很多重复的 ID。 HTML 解析器会讨厌这样的!
-
另外,这对我来说是 TL;DR 点。请提供一些不那么长的示例 HTML。
-
@scrowler 我更新了代码以拉出一个带有文本的简单页面。我不确定这是否是您的要求
-
更好 - 但现在您的文件没有 ID 为即将到来的联赛日期的元素。为了给出一个可重现的例子,你应该提供尽可能小的代码块让别人重现你的问题。例如。具有该 id 的 div,填充您要替换的链接或您提供的一堆文本。
-
一个 DOMElement 可以被 $element->setAttribute("href", ...) 之类的语句操作。如果您阅读文档,您会发现它不是一个简单的字符串操作 API,而是一个具有操作属性的方法的对象。即 DOMElement 不是字符串,而是具有 API 的对象。
标签: php html web-scraping domdocument