如何在 airbnb 网站上获取正确的 XPATH CSS

How to get the correct XPATH CSS on airbnb website

大家好。现在我正在学习用于抓取 airbnb 网站的 XPATH 函数。我将它与 PHP PhantomJS 结合在 Laravel 5.1.

基于此爱彼迎网站:https://www.airbnb.com/rooms/1064946

我想知道酒店名称和价格。但我混淆了如何在我的 xpath 代码中设置正确的 css。这是我的代码:

    $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) { }

这段代码有什么问题。请帮我。谢谢

我认为您需要检查各种标签元素和 类 您的使用,您所拥有的似乎都在寻找我找不到的东西。我已经设法提取了一些数据,但由于我没有使用 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);

然后我可以使用它来检查代码实际上是什么 运行 并查看使用了哪些标签和 类。

您正在查看不属于 div 的 class:

//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"]

你看到规律了吗?你不只是用 div 开始一个 xpath,它是标签。