Использование DOMXpath для перехвата всех имен команд со страницы в PHP - PullRequest
2 голосов
/ 18 июня 2019

Я хотел бы извлечь все название команды и ссылку с этой страницы:

https://www.transfermarkt.fr/ligue-1/startseite/wettbewerb/FR1

Я использую DOMXpath для сопоставления элемента, но со следующим кодом он мне ничего не возвращает.

function get_data($url) {
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

$url = 'https://www.transfermarkt.fr/ligue-1/startseite/wettbewerb/FR1';
$html = get_data($url);

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

foreach($xpath->query('//*[contains(concat( " ", @class, " " ), concat( " ", "hide-for-pad", " " ))]//*[contains(concat( " ", @class, " " ), concat( " ", "tooltipstered", " " ))]') as $v) {
    echo $v->getAttribute("href") . PHP_EOL;
}

Знаешь почему, пожалуйста?

Спасибо за любую помощь.

1 Ответ

1 голос
/ 18 июня 2019

Иногда HTML изменяется с помощью Javascript после загрузки страницы.Я посмотрел на страницу, и я думаю, что вы сможете получить подробности из следующего (пожалуйста, убедитесь, что отображается правильный URL) ...

$teams = $xpath->query('//td[@class="zentriert no-border-rechts"]/a[contains(concat( " ", @class, " " ), concat( " ", "vereinprofil_tooltip", " " ))]');
foreach($teams as $v) {
    echo $v->getAttribute("href") . " - ";
    echo $v->firstChild->getAttribute("alt").PHP_EOL;
}

Это может дать дубликаты, поэтомуМожно создать список команд и URL-адресов, например, так ...

$teams = [];
foreach($teams as $v) {
    $teams[$v->firstChild->getAttribute("alt")] = $v->getAttribute("href");
}

, который даст вам список названий команд (в качестве ключа) и URL-адрес в качестве значения.

...