Я работаю с парсером DOM, и у меня возникают проблемы. Я в основном пытаюсь захватить href внутри тега, который содержит только идентификатор класса "thumbnail". Я пытаюсь распечатать ссылки на экране и не получаю никаких результатов. Любая помощь приветствуется. Я также включил error_reporting (E_ALL); и все еще ничего.
$html = file_get_contents('http://www.reddit.com/r/funny');
$dom = new DOMDocument();
@$dom->loadHTML($html);
$classId = "thumbnail ";
$div = $html->find('a#'.$classId);
echo $div;
Я также пробовал это, но все же имел тот же результат НИЧЕГО:
include('simple_html_dom.php');
$html = file_get_contents('http://www.reddit.com/r/funny');
$dom = new DOMDocument();
@$dom->loadHTML($html);
// grab all the on the page
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");
$ret = $html->find('a[class=thumbnail]');
echo $ret;
Этот код, вероятно, будет работать:
$html = file_get_contents('http://www.reddit.com/r/funny');
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$hyperlinks = $xpath->query('//a[@class="thumbnail"]');
foreach($hyperlinks as $hyperlink) {
echo $hyperlink->getAttribute('href'), '<br>;'
}
contains(concat(' ',@class,' '),' thumbnail ')
для проверки, есть ли у чего-то класс, но, возможно, также и другие имена классов.
Вы были почти там:
<?php
$dom = new DOMDocument();
@$dom->loadHTMLFile('http://www.reddit.com/r/funny');
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a[contains(concat(' ',normalize-space(@class),' '),' thumbnail ')]");
var_dump($hrefs);
дает:
class DOMNodeList#28 (1) {
public $length =>
int(25)
}
25 матчей, я бы назвал это успехом.
$dom->loadHTMLFile($url)
если вы используете simple_html_dom, почему вы делаете все эти лишние вещи? Он уже обертывает ресурс во всем, что вам нужно - http://simplehtmldom.sourceforge.net/manual.htm
include('simple_html_dom.php');
// set up:
$html = new simple_html_dom();
// load from URL:
$html->load_file('http://www.reddit.com/r/funny');
// find those <a> elements:
$links = $html->find('a[class=thumbnail]');
// done.
echo $links;
Протестировали его и внесли некоторые изменения - это тоже отлично.
<?php
// load the url and set up an array for the links
$dom = new DOMDocument();
@$dom->loadHTMLFile('http://www.reddit.com/r/funny');
$links = array();
// loop thru all the A elements found
foreach($dom->getElementsByTagName('a') as $link) {
$url = $link->getAttribute('href');
$class = $link->getAttribute('class');
// Check if the URL is not empty and if the class contains thumbnail
if(!empty($url) && strpos($class,'thumbnail') !== false) {
array_push($links, $url);
}
}
// Print results
print_r($links);
?>
$html
- это строка, а не объект, поэтому вы никогда не сможете использовать$html->
. Вы смешиваете DOMDocument и анализатор Simple HTML DOM.