php dom не принимает URL - PullRequest
       1

php dom не принимает URL

0 голосов
/ 15 марта 2012

Я пытаюсь создать программу, которая откроет текстовый файл с URL-адресами, разделенными |.Затем он займет первую строку текстового документа, отсканирует этот URL и удалит его из текстового файла.Каждый URL должен быть обработан основным сканером.Я знаю, что часть сканера работает, потому что, если я введу один из URL в кавычках, а не переменную из текстового файла, она будет работать.Я нахожусь в точке, где он ничего не вернет, потому что URL просто не будет принят.

Это базовая версия моего кода, потому что мне пришлось разбить его на части, чтобы исключить проблему.

$urlarray = explode("|", $contents = file_get_contents('urls.txt'));

$url = $urlarray[0];
$dom = new DOMDocument('1.0');
@$dom->loadHTMLFile($url);

$anchors = $dom->getElementsByTagName('a');
foreach($anchors as $element)
{
    $title = $element->getAttribute('title');
    $class = $element->getAttribute('class');
    if($class == 'result_link')
    {
        $title = str_replace('Synonyms of ', '', $title);
        echo $title . "<br />";
    }
}`

Ответы [ 2 ]

1 голос
/ 16 марта 2012

Приведенный ниже код работает как чемпион, протестированный с вашими примерами:

<?php
$urlarray = explode("|", $contents = file_get_contents('urls.txt'));

$url = $urlarray[0];

$userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)';

$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$html = curl_exec($ch);

$dom = new DOMDocument();
@$dom->loadHTML($html);

$anchors = $dom->getElementsByTagName('a');
foreach($anchors as $element)
{
    $title = $element->getAttribute('title');
    $class = $element->getAttribute('class');
    if($class == 'result_link')
    {
        $title = str_replace('Synonyms of ', '', $title);
        echo $title . "<br />";
    }
}
?>

ПОЧТИ ЗАБЫЛ: ДАВАЙТЕ СЕЙЧАС ПОСТАВИТЬ ЕГО В ПЕТЛЯ, ЧТОБЫ ПРОЙТИ ПО ВСЕМ URL:

<?php
    $urlarray = explode("|", $contents = file_get_contents('urls.txt'));

    $url = $urlarray[0];
    foreach($urlarray as $url) {
        if(!empty($url)) {
            $userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)';

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
            curl_setopt($ch, CURLOPT_URL,trim($url));
            curl_setopt($ch, CURLOPT_FAILONERROR, true);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($ch, CURLOPT_AUTOREFERER, true);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
            curl_setopt($ch, CURLOPT_TIMEOUT, 10);
            $html = curl_exec($ch);

            $dom = new DOMDocument();
            @$dom->loadHTML($html);

            $anchors = $dom->getElementsByTagName('a');
            foreach($anchors as $element)
            {
                $title = $element->getAttribute('title');
                $class = $element->getAttribute('class');
                if($class == 'result_link')
                {
                    $title = str_replace('Synonyms of ', '', $title);
                    echo $title . "<br />";
                }
            }
            echo '<hr />';
        }
    }
?>
0 голосов
/ 15 марта 2012

Так что, если вы введете URL-адрес вручную $ url = 'http://www.mywebsite.com';, все будет работать так, как ожидается?

Если это так, то здесь есть проблема: $ urlarray = explode ("|", $ contents =file_get_contents ('urls.txt'));

Вы уверены, что urls.txt загружается?Вы уверены, что он содержит http://a.com|http://b.com и т. Д.

Я хотел бы var dump $ contents = file_get_contents ('urls.txt') перед оператором explode, чтобы увидеть, загружается ли он.

Если да, то я бы взорвал в $ urlarray, и var dump $ urlarray [0]

, если он выглядит правильно, я бы обрезал его перед отправкой в ​​dom с помощью trim ($ urlarray [0])

Я могу даже пойти до того, чтобы использовать действительные регулярные выражения, чтобы убедиться, что эти URL действительно являются URL-адресами, прежде чем отправлять их в dom.

Дайте мне знать результаты, и я постараюсь помочь вам в дальнейшем,или опубликовать весь пример кода, включая URLS.txt

И я буду запускать его локально

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...