Agoda 拥有数百万条酒店和房产信息。无论您是进行研究、构建旅游聚合器,还是分析酒店价格,收集和分析价格数据和定价信息对于市场调研和竞争分析都至关重要。从 Agoda 抓取数据对您的项目来说可能非常有用。
在本指南中,我们将向您展示如何 抓取酒店数据 使用 Python 和 Crawlbase Crawling API您将学习如何提取酒店名称、价格、评论和评分,以及如何提取详细数据以获得全面的洞察,同时还能轻松浏览 Agoda 的滚动分页功能。我们还将介绍如何设置 Python 环境以及如何将抓取的数据以 JSON 等结构化格式存储,并重点介绍数据提取和数据收集是该流程中的关键步骤。
你将拥有一个 Agoda 网络爬虫,它可以 抓取动态内容 并获取酒店列表。除了涵盖分页和利用 API 进行数据抓取等中级主题外,本指南还特别为初学者设计。
准备好了吗?这里有一份简短的分步指南和详细视频,教你如何从 Agoda 抓取酒店数据:
目录
- 为什么要从 Agoda 抓取酒店数据?
- 从 Agoda 中提取的关键数据点
- Crawlbase Crawling API 用于抓取 Agoda 上的酒店列表
- 设置 Python 环境
- 安装 Python 和所需的库
- 用于网页抓取的 IDE
- 爬取 Agoda 的房源信息
- 检查 HTML 以识别选择器
- 编写 Agoda 搜索列表抓取工具
- 处理基于滚动的分页
- 将抓取的数据存储在 JSON 文件中
- 完整的 Python 代码示例
- 总结
- 常见问题解答 (FAQs)
为什么要从 Agoda 抓取酒店数据?
Agoda 是一个备受欢迎的在线旅行预订网站,深受全球数百万用户的信赖,提供最优惠的酒店价格。Agoda 的数据库中拥有数百万家住宿信息,是企业、研究人员和开发者的宝贵信息宝库。通过抓取 Agoda 的酒店数据,您可以获得手动难以获得的洞察。抓取酒店数据还能提供竞争情报,并支持酒店行业的市场分析。
以下是抓取 Agoda 酒店数据有价值的一些原因:
1。 市场调查
抓取 Agoda 数据可以帮助您分析酒店价格、趋势和空房情况,使用抓取的数据进行价格比较,并比较不同酒店的价格,帮助旅行社、酒店经理和竞争对手优化定价并寻找机会。此外,抓取数据还能让您监控价格随时间的变化,并深入了解市场中的客户偏好。
2. 建立旅游聚合器
Agoda 数据为用户、旅游比较网站或应用程序提供实时酒店价格、评分、评论和空房情况,包括房间类型、房间类型和其他酒店详细信息,如便利设施和酒店特色。
聚合器还可以提供多个地点的数据,帮助用户比较不同地区和城市的选择。
3。 竞争对手分析
酒店可以使用 Agoda 的数据来追踪 竞争对手的定价、促销和评论,以及分析酒店评级、评论数据和入住率,以评估绩效并改进定价和服务。
4. 个性化推荐
通过抓取 Agoda 的酒店数据,开发人员可以根据设施、评级和位置创建个性化的旅行建议。
5. 学术研究
研究人员可以使用 Agoda 的数据研究旅游趋势、用户行为和酒店业,利用公共数据并确保学术项目和报告的全面覆盖。
从 Agoda 抓取酒店数据时,关注最有价值的数据点将帮助您获得最大的收益。以下是要提取的关键数据点:

- 饭店名称 – 酒店名称有助于识别酒店。
- 每晚价格 – 一晚住宿的费用。
- 学费 / 合计 – 整个住宿的全价,含税。
- 酒店评级 – 通过顾客评级来评估房产的质量。
- 评论数 – 表明酒店的知名度和可信度。
- 地点 – 酒店所在的城市或街区。
- 房内用品 – 酒店提供的设施包括无线网络、游泳池、健身房等。
- 房型 – 住宿类型,例如酒店、度假村或公寓。
- 房间供应情况 – 有关特定日期内可用房间的信息。
- 酒店图片 – 房产的视觉效果有助于展示房源信息。
Crawlbase Crawling API 用于抓取 Agoda 上的酒店列表
Crawlbase Crawling API 是抓取 Agoda 数据的完美工具,它具有滚动时加载的动态内容。它处理 JavaScript 呈现的页面并绕过 IP 阻止等安全措施,因此抓取数据高效且流畅。
这里的原因 Crawlbase 适用于Agoda抓取:
- 处理动态内容: Crawlbase 模拟人类滚动,因此当页面加载更多数据时,所有酒店列表都会被捕获。
- IP旋转:轮换 IP 以避免 Agoda 的速率限制和阻止。
- 快速和可靠:快速抓取大量数据。
- 可定制的请求:根据您的需要调整标头、cookie 和请求参数。
Crawlbase Python库
此 Crawlbase Python 库让 API 的使用变得简单。首先,你需要 Crawlbase 访问令牌,您可以通过 报名 为了他们的服务。
以下是使用以下代码从 Agoda 获取数据的示例代码 Crawlbase:
1 2 3 4 5 6 7 8 9 10 11 12 13
| ,来自 爬行基地 进口 抓取API
爬行 API = 爬行 API({ '令牌': 'YOUR_CRAWLBASE_TOKEN' })
DEF make_crawlbase_request(网址): 响应=crawling_api.get(url)
if 回复[“标题”]['pc_status'] == '200': 回报 回复['身体']。解码('utf-8') 其他: 打印(f"无法获取页面。状态代码: {回复[“标题”]['pc_status']}") 回报 没有
|
注意: 来自 Crawlbase 需要抓取 JavaScript 内容。 Crawlbase 为其免费提供 1,000 个请求 Crawling API。 请参阅 文件 了解更多。接下来,我们将为 Agoda 抓取设置您的 Python 环境!
在下一部分中,我们将为 Agoda 抓取设置您的 Python 环境!
设置 Python 环境
安装库和配置环境是开始 Agoda 抓取的先决条件。按照以下步骤完成设置。
安装 Python 和所需的库
确保你的电脑上安装了 Python。如果没有,请从 Python官方网站.
安装Python后,我们需要安装几个必需的库:
- Crawlbase Python库:与 Crawlbase Crawling API.
- 美丽汤:解析HTML并提取数据。
您可以使用 pip 安装这些库:
1
| pip 安装 crawlbase beautifulsoup4
|
用于网页抓取的 IDE
集成开发环境 (IDE) 将使编码和运行抓取工具更加容易。Python 的热门选择有:
选择一个适合您的,就可以了!
爬取 Agoda 的房源信息
在本节中,我们将抓取“吉隆坡”城市的 Agoda 房源列表。搜索网址为:
吉隆坡 的 Agoda 搜索网址
我们将通过以下步骤来有效地抓取列表:
检查 HTML 以识别选择器
在开始抓取之前,我们需要了解 Agoda 搜索结果页面的 HTML 结构,以便确定要提取的酒店数据的选择器。
- 打开 Agoda 网址:导航至吉隆坡的 Agoda 搜索结果页面。
- 检查页面:右键单击页面并选择“检查”或按
Ctrl + Shift + I 打开开发者工具。

- 确定关键要素:在页面的 HTML 结构中,找到包含酒店详细信息的元素。我们将重点关注:
- 饭店名称:在
<h3> 元素与 data-selenium="hotel-name". - 价格筛选:在
<div> 元素与 data-element-name="final-price". - 评分:在
<p> 元素与 data-element-name="review-score". - 林克酒店:在
<a> 用类标记 PropertyCard__Link 链接到酒店的页面。
编写 Agoda 搜索列表抓取工具
为了从 Agoda 抓取数据,我们将使用 Crawlbase Crawling API 处理动态内容并像真实浏览器一样渲染页面。这确保我们捕获所有酒店列表,即使是通过 JavaScript 加载的列表。提取酒店数据时,务必收集每个列表的详细价格数据,例如不同房型和选项的价格。此外,您还应确定搜索结果中找到的酒店总数,以量化酒店空房情况。
我们可以这样编写爬虫程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| ,来自 爬行基地 进口 抓取API ,来自 bs4 进口 美丽汤 进口 JSON
爬行 API = 爬行 API({'令牌': 'YOUR_CRAWLBASE_TOKEN'})
DEF 获取agoda页面(网址): 响应=crawling_api.get(url) if 回复[“标题”]['pc_status'] == '200': 回报 回复['身体']。解码('utf-8') 其他: 打印(“获取页面时出错。”) 回报 没有
DEF 提取数据(html_内容): 汤 = BeautifulSoup(html_content, 'html.parser') 酒店 = []
HPMC胶囊 饭店 in 汤.选择('div#contentContainer ol.酒店列表容器 > li.PropertyCard'): 名称 = 酒店.select_one('h3[data-selenium="酒店名称"]').text.strip() if 酒店.select_one('h3[data-selenium="酒店名称"]') 其他 '' 价格 = 酒店.select_one('div[数据元素名称="最终价格"]').text.strip() if 酒店.select_one('div[数据元素名称="最终价格"]') 其他 '' 评级 = 酒店.select_one('p[数据元素名称="评价分数"]').text.strip() if 酒店.select_one('p[数据元素名称="评价分数"]') 其他 '' 链接 = hotel.select_one(‘a.PropertyCard__Link’)['href'] if 酒店.select_one(‘a.PropertyCard__Link’) 其他 ''
酒店.附加({ “名称”: 姓名, '价格': 价格, '评分': 评分, '关联': f"https://www.agoda.com{关联}" })
回报 酒店
|
处理基于滚动的分页
Agoda 采用滚动分页技术,因此向下滚动页面时,会出现更多酒店列表。我们可以指导 Crawlbase Crawling API 模拟滚动并捕获更多列表。
为了管理滚动,我们可以使用 scroll 金益辉 scroll_interval 选项。我们可以这样设置它们:
1 2 3 4 5 6
| 选项= { '滚动': '真的', '滚动间隔': '20' }
响应=crawling_api.get(url,选项)
|
这将使 Crawler 滚动 20 秒,确保在抓取之前加载所有酒店列表。
将抓取的数据存储在 JSON 文件中
一旦我们有了数据,我们就需要将其保存为 JSON 等结构化格式,以便我们以后可以分析或处理数据。以下是我们将抓取的酒店数据保存到 JSON 文件的方法:
1 2 3 4
| DEF 保存到json(数据,文件名='酒店数据.json'): - open(文件名, 'w') as f: json.dump(数据,f,缩进=4) 打印(f”数据保存至 {文档名称}")
|
完整的 Python 代码示例
现在我们已经准备好了所有组件,让我们将所有内容组合成一个完整的工作示例。此脚本将获取吉隆坡的 Agoda 搜索结果,提取酒店信息并将其存储在 JSON 文件中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| ,来自 爬行基地 进口 抓取API ,来自 bs4 进口 美丽汤 进口 JSON
爬行 API = 爬行 API({'令牌': 'YOUR_CRAWLBASE_TOKEN'})
DEF 获取agoda页面(网址): 选项= { '滚动': '真的', '滚动间隔': '20' }
响应=crawling_api.get(url,选项) if 回复[“标题”]['pc_status'] == '200': 回报 回复['身体']。解码('utf-8') 其他: 打印(“获取页面时出错。”) 回报 没有
DEF 提取数据(html_内容): 汤 = BeautifulSoup(html_content, 'html.parser') 酒店 = []
HPMC胶囊 饭店 in 汤.选择('div#contentContainer ol.酒店列表容器 > li.PropertyCard'): 名称 = 酒店.select_one('h3[data-selenium="酒店名称"]').text.strip() if 酒店.select_one('h3[data-selenium="酒店名称"]') 其他 '' 价格 = 酒店.select_one('div[数据元素名称="最终价格"]').text.strip() if 酒店.select_one('div[数据元素名称="最终价格"]') 其他 '' 评级 = 酒店.select_one('p[数据元素名称="评价分数"]').text.strip() if 酒店.select_one('p[数据元素名称="评价分数"]') 其他 '' 链接 = hotel.select_one(‘a.PropertyCard__Link’)['href'] if 酒店.select_one(‘a.PropertyCard__Link’) 其他 ''
酒店.附加({ “名称”: 姓名, '价格': 价格, '评分': 评分, '关联': f"https://www.agoda.com{关联}" })
回报 酒店
DEF 保存到json(数据,文件名='酒店数据.json'): - open(文件名, 'w') as f: json.dump(数据,f,缩进=4) 打印(f”数据保存至 {文档名称}")
if __名字__ == “__主要的__”: 网址= "https://www.agoda.com/search?city=14524&checkIn=2025-01-05&los=2&rooms=1&adults=2&checkOut=2025-01-09" html_content = fetch_agoda_page(网址)
if html_内容: 酒店数据 = 提取酒店数据(html内容) 保存到json(酒店数据)
|
示例输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| [ { “名称”: “Mercu 夏季套房 KLCC 的钻石套房 KL”, “价钱”: “28 美元”, “评分”: “7.7”, “关联”: "https://www.agoda.com/axon-suite-klcc-by-home/hotel/kuala-lumpur-my.html?countryId=198&finalPriceView=1&isShowMobileAppPrice=false&cid=-1&numberOfBedrooms=&familyMode=false&adults=2&children=0&rooms=1&maxRooms=0&checkIn=2025-01-7&isCalendarCallout=false&childAges=&numberOfGuest=0&missingChildAges=false&travellerType=1&showReviewSubmissionEntry=false¤cyCode=USD&isFreeOccSearch=false&tspTypes=17&los=4&searchrequestid=c975ab20-8534-4286-8e45-b8f3b25524f3" }, { “名称”: “KLCC 城堡优雅夏日套房酒店”, “价钱”: “34 美元”, “评分”: “8.4”, “关联”: "https://www.agoda.com/summer-suites-klcc-by-castle-classy/hotel/all/kuala-lumpur-my.html?countryId=198&finalPriceView=1&isShowMobileAppPrice=false&cid=-1&numberOfBedrooms=&familyMode=false&adults=2&children=0&rooms=1&maxRooms=0&checkIn=2025-01-7&isCalendarCallout=false&childAges=&numberOfGuest=0&missingChildAges=false&travellerType=1&showReviewSubmissionEntry=false¤cyCode=USD&isFreeOccSearch=false&tspTypes=3&los=4&searchrequestid=c975ab20-8534-4286-8e45-b8f3b25524f3" }, { “名称”: 《Deface Platinum 2 吉隆坡》, “价钱”: “72 美元”, “评分”: “8.5”, “关联”: "https://www.agoda.com/deface-victory-suites-kuala-lumpur/hotel/kuala-lumpur-my.html?countryId=198&finalPriceView=1&isShowMobileAppPrice=false&cid=-1&numberOfBedrooms=&familyMode=false&adults=2&children=0&rooms=1&maxRooms=0&checkIn=2025-01-7&isCalendarCallout=false&childAges=&numberOfGuest=0&missingChildAges=false&travellerType=1&showReviewSubmissionEntry=false¤cyCode=USD&isFreeOccSearch=false&tspTypes=8,-1&los=4&searchrequestid=c975ab20-8534-4286-8e45-b8f3b25524f3" }, { “名称”: “吉隆坡里维埃拉城酒店 (Guestonic 酒店)”, “价钱”: “20 美元”, “评分”: “9.2”, “关联”: "https://www.agoda.com/riveria-city-kuala-lumpur-by-guestonic/hotel/kuala-lumpur-my.html?countryId=198&finalPriceView=1&isShowMobileAppPrice=false&cid=-1&numberOfBedrooms=&familyMode=false&adults=2&children=0&rooms=1&maxRooms=0&checkIn=2025-01-7&isCalendarCallout=false&childAges=&numberOfGuest=0&missingChildAges=false&travellerType=1&showReviewSubmissionEntry=false¤cyCode=USD&isFreeOccSearch=false&tspTypes=5&los=4&searchrequestid=c975ab20-8534-4286-8e45-b8f3b25524f3" }, .... 更多的 ]
|
总结
使用 Python 和 Crawlbase 使企业能够通过竞争分析、价格监控和市场研究获得洞察力。使用 Crawlbase Crawling API,您可以从 Agoda 等动态、JavaScript 密集型网站抓取数据,而不会遇到分页或内容加载延迟等常见问题。
在本博客中,我们介绍了从查找 Agoda 搜索结果页面上的关键 HTML 元素到编写和运行完整的 Python 抓取工具的所有内容。我们还展示了如何处理基于滚动的分页,并将抓取的数据存储在 JSON 文件中以供进一步分析。
如果您有兴趣了解如何从其他房地产网站抓取数据,请查看下面的有用指南。
📜 如何抓取 Realtor.com
📜 如何刮 Zillow
📜 如何抓取 Airbnb
📜 如何抓取 Booking.com
📜 如何抓取 Expedia
如果您有任何问题或反馈,我们的 支持团队 随时为您的网络抓取之旅提供帮助。请记住遵守道德准则并尊重网站的服务条款。快乐刮擦!
常見問題解答
问:从 Agoda 抓取酒店数据合法吗?
网页抓取在法律上属于灰色地带。虽然抓取公开数据一般是可以接受的,但请务必查看 Agoda 的服务条款以确保合规。抓取时要负责任,避免将数据用于未经授权的用途。
问:如何处理 Agoda 上的 CAPTCHA 或反机器人措施?
Agoda 使用 CAPTCHA 和其他机器人检测技术。您可以使用 Crawlbase Crawling API,具有基于浏览器的渲染和IP轮换等功能。
问:我可以一次抓取多个城市的数据吗?
是的,您可以通过修改 Agoda URL 中的查询参数来抓取多个城市的数据。例如,更新 city 参数与所需城市的 ID 一致。只需确保遵循抓取最佳实践,例如限制请求频率,即可避免被阻止。