PHP file_get_contents booking.com 站点

PHP file_get_contents booking.com Site

我尝试从酒店获取一个 booking.com 页面,然后使用正则表达式获取价格。问题如下:

我调用 file_get_contents 时使用诸如签入和签出 (file_get_contents("/hotel/at/myhotel.html?checkin=2017-10-12&checkout=2017-10-13")) 日期之类的参数,以便向访问者显示价格。如果我在浏览器中查看源代码,我会看到条目:

b_this_url : '/hotel/at/myhotel.html?label=gen173nr-1FCAsoDkIcbmV1ZS1wb3N0LWhvbHpnYXUtaW0tbGVjaHRhbEgHYgVub3JlZmgOiAEBmAEHuAEHyAEM2AEB6AEB-AEDkgIBeagCAw;sid=58ccf750fc4acb908e20f0f28544c903;checkin=2017-10-12;checkout=2017-10-13;dist=0;sb_price_type=total;type=total&',

如果我回显来自 file_get_contents 的字符串,则字符串如下所示:

b_this_url : '/hotel/at/myhotel.html',

因此,我使用 file_get_contents 传递给 url 的所有参数都消失了,因此我无法在页面上使用我的正则表达式找到任何价格...

有人解决这个问题吗?

该网页并非完全由服务器端生成,但它在 HTML 部分加载后严重依赖 JavaScript。如果您正在寻找在浏览器中呈现页面的方式,我认为您应该使用 php curl 而不是 file_get_contents() 来进行这种网络抓取。我从 Postman(一个 google chrome 扩展程序/独立桌面应用程序)为您生成了一个自动代码,用于您给定的 url。响应包含带有参数的完整 url。请看图片,我也为您发布了代码。

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://www.booking.com/hotel/at/hilton-innsbruck.de.html?checkin=2017-10-10%3Bcheckout%3D2017-10-11",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "cache-control: no-cache",
    "postman-token: 581a75a7-6600-6ed6-75fd-5fb09c25d927"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}