PHP file_get_contents booking.com网站

时间:2017-10-10 16:18:51

标签: php file-get-contents

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

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

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的所有参数都消失了,因此我无法在页面上找到我的正则表达式的任何价格...

有没有人能解决这个问题?

1 个答案:

答案 0 :(得分:-1)

网页不是完全由服务器端生成的,但在HTML部分加载后它依赖于JavaScript。如果您正在寻找在浏览器中查看的页面,我认为您应该使用php curl代替file_get_contents()进行此类网页报废。我为您提供了针对您的指定网址的 Postman (谷歌浏览器扩展程序/独立桌面应用程序)的自动代码。响应包含带有参数的完整URL。看到图片,我也为你发布了代码。

enter image description here

<?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;
}