Python爬虫:实时监测携程酒店房价变化
以下是使用Python代码实现该需求的示例:
import time
import datetime
import requests
from bs4 import BeautifulSoup
import matplotlib.pyplot as plt
# 指定需要爬取的酒店和房型
hotel_id = '12345678'
room_type = '豪华大床房'
# 创建一个空字典用于储存数据
data = {}
while True:
# 获取当前时间
now = datetime.datetime.now()
# 爬取携程网站
url = f'https://hotels.ctrip.com/hotel/{hotel_id}.html'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 找到指定房型的价格和预定状态
room_price = soup.find('span', {'title': room_type}).parent.find_next_sibling('div').find('span', {'class': 'base_txtdiv'}).text
room_status = soup.find('span', {'title': room_type}).parent.find_next_sibling('div').find('span', {'class': 'J_RoomState'}).text
# 将数据存入字典
data[now] = {'price': room_price, 'status': room_status}
# 每10分钟爬取一次数据
time.sleep(600)
# 每天中的每个小时输出价格变化曲线
if now.minute == 0:
hours = list(range(24))
prices = [data[datetime.datetime(now.year, now.month, now.day, hour)]['price'] if datetime.datetime(now.year, now.month, now.day, hour) in data else None for hour in hours]
plt.plot(hours, prices)
plt.xlabel('Hour')
plt.ylabel('Price')
plt.title(f'Price change of {room_type} in hotel {hotel_id} on {now.date()}')
plt.savefig(f'{now.date()}_{room_type}_price_change.png')
plt.show()
该代码首先指定了需要爬取的酒店和房型,然后利用while循环每10分钟爬取一次数据,并将数据存入一个字典中。每当当前时间的分钟数为0时,就利用matplotlib库将当天中每个小时的价格变化曲线输出,并将输出的图像保存到本地。
注意:
- 该代码仅供参考,实际应用中需要根据携程网站的结构进行调整。
- 使用爬虫工具时请遵守网站的robots.txt协议,避免过度爬取给网站服务器造成负担。
- 为了防止被网站封禁,建议设置合理的爬取频率和请求间隔。
原文地址: https://www.cveoy.top/t/topic/mmAg 著作权归作者所有。请勿转载和采集!