Как очистить ссылки со страницы с помощью DOM & XPath? - PullRequest
2 голосов
/ 24 марта 2011

У меня есть страница, очищенная с помощью curl, и я хочу получить все ссылки с определенным идентификатором.Насколько я могу сказать, лучший способ сделать это с DOM и XPath.Нижеследующий код захватывает большое количество URL-адресов, но обрезает многие из них и захватывает текст, который не является URL-адресом.

$ curl_scraped_page - страница, очищенная скручиванием.

$dom = new DOMDocument();
@$dom->loadHTML($curl_scraped_page);
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");

Я на правильном пути?Мне просто нужно связываться с синтаксисом "/ html / body // a" xpath или мне нужно добавить еще, чтобы захватить элемент id?

Ответы [ 4 ]

1 голос
/ 25 марта 2011

Вы также можете сделать это таким образом, и у вас будут только 100 * теги onyl, которые имеют id и href:

$doc = new DOMDocument();
$doc->loadHTML($curl_scraped_page);
$xpath = new DOMXPath($doc);

$hrefs = $xpath->query('//a[@href][@id]');
0 голосов
/ 24 июля 2014

Я думаю, что самый простой способ - объединить 2 следующих класса для получения информации с другого сайта:

Извлечение информации из любого тега HTML, содержимого или атрибута тега: http://simplehtmldom.sourceforge.net/

Легко обрабатывать локон, поддерживает запросы POST: https://github.com/php-curl-class/php-curl-class

Пример:

include('path/to/curl.php');
include('path/to/simple_html_dom.php');
$url = 'http://www.example.com';

$curl = new Curl;
$html = str_get_html($curl->get($url)); //full HTML of website
$linksWithSpecificID = $html->find('a[id=foo]'); //returns array of elements

Изучите Simple HTML DOM Parser Manual из верхней ссылки для манипулирования данными HTML.

0 голосов
/ 25 марта 2011

http://simplehtmldom.sourceforge.net/

include('simple_html_dom.php');
$html = file_get_html('http://www.google.com/');
foreach($html->find('#www-core-css') as $e) echo $e->outertext . '<br>';
0 голосов
/ 25 марта 2011
$dom = new DOMDocument();
$dom->loadHTML($curl_scraped_page);

$links = $dom->getElementsByTagName('a');

$processed_links = array();

foreach ($links as $link)
{
    if ($link->hasAttribute('id') && $link->hasAttribute('href'))
    {
        $processed_links[$link->getAttribute('id')] = $link->getAttribute('href');
    }
}

Это решение по вашему вопросу.

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