抓取搜索结果后无法仅打印搜索结果
Can't able to print only search result after scrape search result
我正在使用 Simple Html Dom。我是网络抓取的新手,我正在从 booking.com 抓取数据 我在仅打印搜索结果时遇到问题 URL.My 代码如下
<?php
include 'simple_html_dom.php';
$searchText = "Venice";
$searchText = str_replace(" ", "+", $searchText);
$url = "https://www.booking.com/searchresults.en-gb.html?aid=1781605&lang=en-gb&sid=3bb432f656e368125330f71ea0e74e36&sb=1&src=index&src_elem=sb&error_url=https://www.booking.com/index.en-gb.html?aid=1781605;sid=3bb432f656e368125330f71ea0e74e36;sb_price_type=total;srpvid=dc2798d544dd007f&;&ss=".$searchText."&is_ski_area=0&ssne=".$searchText."&ssne_untouched=".$searchText."&dest_id=-132007&dest_type=city&checkin_year=2019&checkin_month=5&checkin_monthday=19&checkout_year=2019&checkout_month=5&checkout_monthday=20&group_adults=2&group_children=0&no_rooms=1&b_h4u_keep_filters=&from_sf=1";
print $url."<br>";
$html = file_get_html($url);
$i = 0;
$linkObjs = $html->find('a');
foreach ($linkObjs as $linkObj) {
$link = trim($linkObj->href);
/*if (!preg_match('/^https?/', $link) && preg_match('/^hotel/', $link, $matches) && preg_match('/^https?/', $matches[1])) {
$link = matches[1];
} else if (!preg_match('/^https?/', $link)) {
continue;
}*/
if (!preg_match('/^https?/', $link)) {
continue;
}
$i++;
echo "Link: ". $link . "<br/><hr/>";
}
?>
现在的问题是我想打印搜索结果 link,它在 URL 中有 /hotel/
路径,就像 https://www.booking.com/hotel/it/nh-collection-venezia-palazzo-barocci.en-gb.html
现在我不知道如何设置preg_replace
只打印搜索结果 URL 还有标题。
在表达式中使用 ^
意味着断言您在第二个子句中测试的字符串的开头:
if (!preg_match('/^https?/', $link) && preg_match('/^hotel/', $link, $matches) && preg_match('/^https?/', $matches[1])) {
如果您想使用 preg_match,您可以使用单个表达式来检查字符串是否以带有可选 s:
的 http 开头
^https?://.*?/hotel/
^
字符串开头
https?://
匹配http
,可选s
,://
.*?
匹配除换行符之外的任何字符非贪婪
/hotel/
字面匹配
例如:
if (!preg_match('~^https?://.*?/hotel~', $link)) {
continue;
}
在不使用正则表达式的情况下,您还可以使用 substr and strpos
的组合
if (!(substr($link, 0, 4 ) === "http" && strpos($link, '/hotel/') !== false)) {
continue;
}
我正在使用 Simple Html Dom。我是网络抓取的新手,我正在从 booking.com 抓取数据 我在仅打印搜索结果时遇到问题 URL.My 代码如下
<?php
include 'simple_html_dom.php';
$searchText = "Venice";
$searchText = str_replace(" ", "+", $searchText);
$url = "https://www.booking.com/searchresults.en-gb.html?aid=1781605&lang=en-gb&sid=3bb432f656e368125330f71ea0e74e36&sb=1&src=index&src_elem=sb&error_url=https://www.booking.com/index.en-gb.html?aid=1781605;sid=3bb432f656e368125330f71ea0e74e36;sb_price_type=total;srpvid=dc2798d544dd007f&;&ss=".$searchText."&is_ski_area=0&ssne=".$searchText."&ssne_untouched=".$searchText."&dest_id=-132007&dest_type=city&checkin_year=2019&checkin_month=5&checkin_monthday=19&checkout_year=2019&checkout_month=5&checkout_monthday=20&group_adults=2&group_children=0&no_rooms=1&b_h4u_keep_filters=&from_sf=1";
print $url."<br>";
$html = file_get_html($url);
$i = 0;
$linkObjs = $html->find('a');
foreach ($linkObjs as $linkObj) {
$link = trim($linkObj->href);
/*if (!preg_match('/^https?/', $link) && preg_match('/^hotel/', $link, $matches) && preg_match('/^https?/', $matches[1])) {
$link = matches[1];
} else if (!preg_match('/^https?/', $link)) {
continue;
}*/
if (!preg_match('/^https?/', $link)) {
continue;
}
$i++;
echo "Link: ". $link . "<br/><hr/>";
}
?>
现在的问题是我想打印搜索结果 link,它在 URL 中有 /hotel/
路径,就像 https://www.booking.com/hotel/it/nh-collection-venezia-palazzo-barocci.en-gb.html
现在我不知道如何设置preg_replace
只打印搜索结果 URL 还有标题。
在表达式中使用 ^
意味着断言您在第二个子句中测试的字符串的开头:
if (!preg_match('/^https?/', $link) && preg_match('/^hotel/', $link, $matches) && preg_match('/^https?/', $matches[1])) {
如果您想使用 preg_match,您可以使用单个表达式来检查字符串是否以带有可选 s:
的 http 开头^https?://.*?/hotel/
^
字符串开头https?://
匹配http
,可选s
,://
.*?
匹配除换行符之外的任何字符非贪婪/hotel/
字面匹配
例如:
if (!preg_match('~^https?://.*?/hotel~', $link)) {
continue;
}
在不使用正则表达式的情况下,您还可以使用 substr and strpos
的组合if (!(substr($link, 0, 4 ) === "http" && strpos($link, '/hotel/') !== false)) {
continue;
}