如何在 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,它是标签。
大家好。现在我正在学习用于抓取 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,它是标签。