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;
}
我尝试从酒店获取一个 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;
}