如何从Booking.com页面直接提取成人客人数(无需正则)
提取Booking.com页面成人客人数的非正则方法
方法一:文本分割过滤
当前获取到的客人文本包含换行和分隔符,可通过清理文本后拆分筛选,直接提取成人信息:
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver.maximize_window() test_url = 'https://www.booking.com/hotel/gr/diamandi-20.en-gb.html?label=gen173nr-1DCAEoggI46AdIM1gEaFyIAQGYAQm4ARjIAQzYAQPoAQGIAgGoAgS4ApGp7ZgGwAIB0gIkZTBjOTA2MTQtYTc0MC00YWUwLTk5ZWEtMWNiYzg3NThiNGQ12AIE4AIB&sid=47583bd8c0122ee70cdd7bb0b06b0944&aid=304142&ucfs=1&arphpl=1&checkin=2022-10-24&checkout=2022-10-30&dest_id=-829252&dest_type=city&group_adults=2&req_adults=2&no_rooms=1&group_children=0&req_children=0&hpos=2&hapos=2&sr_order=popularity&srpvid=f0f16af3449102aa&srepoch=1662736362&all_sr_blocks=852390201_352617405_2_0_0&highlighted_blocks=852390201_352617405_2_0_0&matching_block_id=852390201_352617405_2_0_0&sr_pri_blocks=852390201_352617405_2_0_0__30000&from=searchresults#hotelTmpl' driver.get(test_url) time.sleep(3) soup2 = BeautifulSoup(driver.page_source, 'lxml') guests = soup2.select_one('span.xp__guests__count') # 提取成人信息的核心代码 if guests: # 清理多余换行和空格 clean_text = guests.text.strip() # 按分隔符·拆分各部分并清理 guest_parts = [part.strip() for part in clean_text.split('·')] # 筛选包含adults的条目 adults_info = next(part for part in guest_parts if 'adults' in part) print(adults_info) # 输出:2 adults
方法二:精准定位DOM元素
如果页面DOM结构中成人信息是独立的子元素,可直接通过筛选文本内容的方式定位元素,避免处理整段文本:
# 替换原代码中提取guests的部分 adults_element = soup2.select_one('span.xp__guests__count *', text=lambda t: t and 'adults' in t.strip()) if adults_element: adults_info = adults_element.text.strip() print(adults_info) # 输出:2 adults
这种方式依赖页面DOM结构的稳定性,若后续页面布局不变,会比文本分割更可靠。
内容的提问来源于stack exchange,提问作者Lefteris Kyprianou
相关产品推荐
相关产品推荐

