Как получить правильный XPATH CSS на сайте airbnb - PullRequest
0 голосов
/ 27 ноября 2018

Halo всем.теперь я изучаю XPATH функцию для очистки сайта airbnb.Я объединяю его с PHP PhantomJS в Laravel 5.1.

на этом сайте airbnb: https://www.airbnb.com/rooms/1064946

Я хочу получить название отеля и цену.но я путаю, как установить правильный CSS в моем коде xpath.вот мой код:

    $client = Client::getInstance();
    $request = $client->getMessageFactory()->createRequest('https://www.airbnb.com/rooms/1064946', 'GET');
    $response = $client->getMessageFactory()->createResponse();
    $client->send($request,$response);
    $htmlstr = $response->getContent();
    $dom = new DOMDocument;
    @$dom->loadHTML($htmlstr);
    $xpath = new \DOMXPath($dom);
    $entries = [];

    foreach ($xpath->query('//div[@class="with-new-header has-epcot-header"]') as $node) {
              $entries[] = [
               'hotel_name' => $xpath->evaluate('string(//div[@class="_12ei9u44"])',$node),
               'price' => $xpath->evaluate('string(//div[@class="_doc79r"])',$node)
             ];
    }
    var_dump($entries);

, но в результате получается

array(0) { }

что не так с этим кодом.Помогите мне, пожалуйста.спасибо

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Вы смотрите на класс, который не принадлежит div:

//div[@class="with-new-header has-epcot-header"]

Он принадлежит телу:

//body[@class="with-new-header has-epcot-header"]

Также следующие операторы xpath не являются divамилибо:

//div[@class="_12ei9u44"]
//div[@class="_doc79r"]

Это пролеты:

//span[@class="_12ei9u44"]
//span[@class="_doc79r"]

Вы видите шаблон?Вы не просто начинаете xpath с div, это тег.

0 голосов
/ 27 ноября 2018

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

foreach ($xpath->query('//div[@class="_1kzvqab3"]') as $node) {
    $entries[] = [
        'hotel_name' => $xpath->evaluate('string(//span[@class="_12ei9u44"])', $node),
        'price' => $xpath->evaluate('string(//span[@class="_doc79r"])', $node)
    ];
}

Одна полезная вещь, которую я нашел, - это запись HTML-кода во временный файл.затем я могу проверить содержимое, что-то вроде ...

file_put_contents("out.html", $htmlstr);

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

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