Ошибка с парсером на php

178
11 октября 2017, 08:58

Вот код парсера:

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
ini_set('max_execution_time', 900000);

$link = $_POST['page_link']; //page_link это страница результатов выдачи google $i = 0; //стартовый номер ссылки на страницу из результатов выдачи

$ch = curl_init();
 curl_setopt($ch, CURLOPT_URL,$link);
 curl_setopt($ch, CURLOPT_USERAGENT, "");
 curl_setopt($ch, CURLOPT_FAILONERROR, 1);
 curl_setopt($ch, CURLOPT_HEADER, 0);
 curl_setopt($ch, CURLOPT_REFERER, "http://www.google.ru/"); 
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
 curl_setopt($ch, CURLOPT_TIMEOUT, 30);
 curl_setopt($ch, CURLOPT_POST, 0);
$data = curl_exec($ch);
preg_match_all("/<cite>(.+?)<\/cite>/is",$data,$matches);
$result = $matches[1];
$resultLength = count($result);
for ($i; $i < $resultLength; $i++) {
    $str_out = strip_tags($result[$i]);
    $str = file_get_contents($str_out, false);
    preg_match_all('#(.+?)\@([a-z0-9-_]+)\.(ru|net|com|ua|in|by|tv|pl|biz)#i',$str,$matches);
    $urls[] = $matches[0];
    $urls_result = implode("",$urls[0]);
    echo $str_out."<br>";
    echo $urls_result."<br>";
}

Если

$link = "https://www.google.com.ua/search?q=odessa+web+studio+contact&oq=odessa+web+studio+contact&gs_l=psy-ab.3..33i160k1.721.721.0.1337.1.1.0.0.0.0.108.108.0j1.1.0....0...1.1.64.psy-ab..0.1.107....0.hXfl1TDkaHc";

То вот такой результат:

https://skylogic.com.ua/contacts.html
sup@skylogic.com
https://lynx.od.ua/contacts/
sup@skylogic.com
https://www.trendline.in.ua/
sup@skylogic.com
https://sozdat-sayt.com.ua/contact/
sup@skylogic.com

и так далее.

Вопрос: почему спарсенный email повторяется, если должен парсится отдельный email на с каждой отдельно страницы. Если сменить номер стартовой страницы с которой должен начать парсинг, e-mail меняется, на тот который спарсили с другой страницы, но по аналогии дублируется.

Answer 1

Вы кажется в цикле пихаете всё сюда $urls[] = $matches[0];
А далее выводите только $urls_result = implode("",$urls[0]); Первый индекс $urls[0]
В начале цикла нужно добавить $urls = []; и будет счастье

READ ALSO
Как сохранить значение ссылки

Как сохранить значение ссылки

Добрый день профессионалыУ меня есть ссылка, когда её нажимаешь, передается значение через переменную dep_link

197
arm-gcc-none-eabi-gcc Создает рекурсии

arm-gcc-none-eabi-gcc Создает рекурсии

Здравствуйте, имею 2 функции

253
Как добавить элемент в массив?

Как добавить элемент в массив?

Здравствуйте, друзья! У меня такой вопрос: есть класс в нем я определил вектор с типом stringИ я вызываю этот класс с этим массивом и хочу туда...

456