Использование веб-сканера PHP для поиска определенных слов без определенных элементов - PullRequest
2 голосов
/ 19 марта 2019

Я следую http://simplehtmldom.sourceforge.net/ за создание веб-сканера с использованием php, но я так запутался, как искать слова без указания элемента.Таким образом, поиск слов осуществляется на основе всех доступных данных.потому что проблема здесь в том, что теперь я указываю данные, которые ищем, используя элемент <p>, но когда нет элемента <p>, результат пуст.

это мой код

<?php
include "simple_html_dom.php";
$html = file_get_html('https://adityadees.blogspot.com/');

foreach($html->find('<p>') as $element) 
if (strpos($element, 'yang') !== false) {
    echo $element;
} else {
    echo $element;
}
?>

например, я хочу попробовать поискать слова, содержащие 'yang', но результаты пусты, потому что эти слова не содержат элемент

.enter image description here

мои результаты enter image description here

, но если слово содержится в элементе

, результат идет хорошо.enter image description here

я пытаюсь изменить эту строку

foreach($html->find('<p>') as $element) 

на

foreach($html->find() as $element) 

но я получил такие ошибки

Неустранимая ошибка: Uncaught ArgumentCountError: слишком мало аргументов для функции simple_html_dom :: find (), 0 передано в C: \ xampp \ htdocs \ crawl \ index.php в строке 5 и по крайней мере 1 ожидается в C: \xampp \ htdocs \ crawl \ simple_html_dom.php: 1975 Трассировка стека: # 0 C: \ xampp \ htdocs \ crawl \ index.php (5): simple_html_dom-> find () # 1 {main}, брошенный в C: \ xampp \htdocs \ crawl \ simple_html_dom.php на линии 1975

Ответы [ 3 ]

1 голос
/ 19 марта 2019

Хотите найти все абзацы / текст, который содержит данное слово?

<code><?php 
include('simple_html_dom.php');

$html = file_get_html('https://adityadees.blogspot.com/');

$strings_array = array();

//it searches for any (*) tag with text yang in it
foreach($html->find('*[plaintext*=yang]') as $element) {
    //take only elements which doesn't have childnodes, so are last ones in recursion 
    if ($element->firstChild() == null) {
        //there still are duplicate strings so add only unique values to an array
        if (!in_array($element->innertext, $strings_array)) {
            $strings_array[] = $element->innertext;

        }
    } 
}

echo '<pre>';
print_r($strings_array);
echo '
'; ?>

Это не окончательное решение, а с чего-то начать. По крайней мере, он находит слово yang 61 раз - так же, как в html-источнике данной страницы.

0 голосов
/ 19 марта 2019

После проверки источника данной страницы вы можете увидеть, что сводка сообщений находится внутри тега div с class = item-snippet.

<div class='item-snippet'> Bagaimana Cara Mengganti Akun Mobile Legend ?  itulah yang selalu dipertanyakan oleh orang yang baru memulai bermain game Mobile Legend.  S...</div>

Вы можете получить свой результат, если будете искать свое слово в таких div:

include('simple_html_dom.php');

$html = file_get_html('https://adityadees.blogspot.com/');

foreach($html->find('div[class=item-snippet]') as $element) {

    if (strpos($element, 'yang') !== false) {

        echo $element;

    } 

}

результат:

Bagaimana Cara Mengganti Akun Mobile Legend ? itulah yang selalu dipertanyakan oleh orang yang baru memulai bermain game Mobile Legend. S...
Bagaimana Cara Mengaitkan Akun Mobile Legend di Patch Baru ? Mungkin masih ada yang bingung tentang cara mengaitkan akun mobile legend den...
Kali ini kita akan membahas tentang bagaimana cara menghitung luas persegi panjangan dengan PHP Hal yang pertama dilakukan adalah membuat ...

Это то, что вы ищете?

0 голосов
/ 19 марта 2019

Как насчет:

foreach($html->find('<body>') as $element) 
if (strpos($element, 'yang') !== false) {
    echo $element;
} else {
    echo $element;
}
...