Я не совсем уверен, что вы просите / пытаетесь сделать .. Но я попробую.
Вы пытаетесь определить область основного содержимого - чтобы очистить только необходимую информацию без какого-либо мусора или ненужного содержимого.
Мой подход заключается в использовании общих структур и передовых методов хорошо отформатированных HTML-страниц. Учтите это:
- Основная статья будет заключена в уникальный тег
ARTICLE
на странице.
- Тег
H1
статьи будет ее заголовком.
- Мы знаем, что используются некоторые повторяющиеся идентификаторы, такие как (main_content, main_article и т. Д.).
Суммируйте эти правила для ваших целей и создайте список идентификаторов, отсортированный по приоритету -> Затем вы можете попытаться проанализировать цель, пока не будет найден один из идентификаторов - что указывает на то, что вы идентифицировали основную область содержимого.
Вот пример -> используя предоставленный вами URL:
$search_logic = [
"#main_content",
"#main_article",
"#main",
"article",
];
// get DOM from URL or file
$html = file_get_contents('https://neilpatel.com/blog/starting-over/');
$dom = new DOMDocument ();
@$dom->loadHTML($html);
//
foreach ($search_logic as $logic) {
$main_container = null;
//Search by ID or By tag name:
if ($logic[0] === "#") {
//Serch by ID:
$main_container = $dom->getElementById(ltrim($logic, '#'));
} else {
//Serch by tag name:
$main_container = $dom->getElementsByTagName($logic);
}
//Do we have results:
if (!empty($main_container)) {
echo "> Found main part identified by: ".$logic."\n";
$article = isset($main_container->length) ? $main_container[0] : $main_container; // Normalize the container.
//Parse the $main_container:
echo " - Example get the title:\n";
echo "\t".$article->getElementsByTagName("h1")[0]->textContent."\n\n";
//You can stop the iteration:
//break;
} else {
echo "> Nothing on the page containing: ".$logic."\n\n";
}
}
Как видите, первые идентификаторы не были найдены, поэтому мы продолжаем пробовать список до тех пор, пока не добьемся желаемого результата -> хороший набор этих тэгов / идентификаторов будет достаточно хорош.
Вот результат:
> Nothing on the page containing: #main_content
> Nothing on the page containing: #main_article
> Found main part identified by: #main
- Example get the title:
If I Had to Start All Over Again, I Would…
> Found main part identified by: article
- Example get the title:
If I Had to Start All Over Again, I Would…
Надеюсь, я помог.