我在尝试学习如何使用DOM Document来抓取网页时遇到了麻烦。我可以使用preg match和regex来使用它,但我一直在研究它是否容易出错,并且最好使用DOM Document。基本上我想转换它:
function lodestone_scraper_preg() {
$html = file_get_contents('http://somepage.com/target'); //get the html returned from the following url
$pattern = '/<div\s*class="topics_list_inner">(.*?)<\/div>/s';
preg_match_all($pattern, $html, $matches, PREG_PATTERN_ORDER);
$matches = $matches[0];
$five = array_slice($matches , 0, 5);
print_r($five);
}
使用DOM Document模型的东西。到目前为止,我已经想出了这个:
function lodestone_scraper_dom() {
$html = file_get_contents('http://somepage.com/target');
$lodestone_doc = new DOMDocument();
if(!empty($html)){
$lodestone_doc->loadHTML($html);
$lodestone_xpath = new DOMXPath($lodestone_doc);
$lodestone_row = $lodestone_xpath->query('//div[@class="topics_list_inner"]');
if($lodestone_row->length > 0){
foreach($lodestone_row as $row){
echo $row->nodeValue;
}
}
}
}
但它只会在没有任何HTML的情况下吐出节点内容。我还需要包含HTML。关键似乎是saveXML,但每当我尝试合并它时我都会收到错误。关于我能用这个做什么的任何暗示?
@Marc尝试了链接中的建议。无法从中获得任何输出。
以下是我尝试使用DOMinnerHTML函数的内容:
function lodestone_scraper_innerHTML() {
$html = file_get_contents('http://na.finalfantasyxiv.com/lodestone/topics/'); //get the html returned from the following url
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->load($html);
$domTable = $dom->getElementsByTagName("div");
foreach ($domTable as $tables)
{
echo DOMinnerHTML($tables);
}
}