我尝试从酒店获取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的所有参数都消失了,因此我无法在页面上找到我的正则表达式的任何价格...
有没有人能解决这个问题?
答案 0 :(得分:-1)
网页不是完全由服务器端生成的,但在HTML部分加载后它依赖于JavaScript。如果您正在寻找在浏览器中查看的页面,我认为您应该使用php curl
代替file_get_contents()
进行此类网页报废。我为您提供了针对您的指定网址的 Postman (谷歌浏览器扩展程序/独立桌面应用程序)的自动代码。响应包含带有参数的完整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;
}