用selenium来,选取某一地点的酒店查询界面作为采集对象,设计两个采集程序分别采集该搜索结果查询页的前 25 条酒店(第一页的基本数据(酒店名、评价、价格、标签、地点等) 与前 10 家酒店的前 3 页具体评价(评价人的名字、评价时间、评分、具体评价信息、入住时间) 等信息
时间: 2023-11-26 19:04:10 浏览: 81
好的,这是一个比较复杂的爬虫任务,需要使用selenium模拟浏览器操作来获取前10家酒店的前3页具体评价信息。以下是示例代码:
1. 导入selenium和webdriver模块
```
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
```
2. 打开浏览器并访问目标搜索结果页面
```
driver = webdriver.Chrome()
driver.get("https://hotels.ctrip.com/hotel/shanghai2#ctm_ref=hod_hp_sb_lst")
```
3. 定位并输入搜索关键词,点击搜索按钮进行搜索
```
search_box = driver.find_element_by_id("txtCity")
search_box.clear()
search_box.send_keys("上海")
search_box.send_keys(Keys.RETURN)
```
4. 等待搜索结果加载完毕并展开所有酒店信息
```
time.sleep(5)
expand_btn = driver.find_element_by_class_name('hotel_list')
expand_btn.click()
all_hotels_btn = driver.find_element_by_class_name('page_list')
all_hotels_btn.click()
```
5. 循环爬取前25条酒店的基本信息
```
for i in range(25):
# 获取酒店基本信息
hotel_name = driver.find_element_by_class_name('hotel_name').text
hotel_rate = driver.find_element_by_class_name('hotel_rate').text
hotel_price = driver.find_element_by_class_name('hotel_price').text
hotel_tag = driver.find_element_by_class_name('hotel_tag').text
hotel_location = driver.find_element_by_class_name('hotel_location').text
# 输出酒店基本信息
print(hotel_name, hotel_rate, hotel_price, hotel_tag, hotel_location)
# 判断是否还有下一个酒店
next_hotel = driver.find_element_by_xpath('//a[@class="down"]')
if next_hotel:
next_hotel.click()
else:
break
```
6. 循环爬取前10家酒店的前3页具体评价信息
```
for i in range(10):
# 点击进入酒店详情页
hotel_detail = driver.find_element_by_xpath('//div[@class="hotel_name"]/a')
hotel_detail.click()
# 切换到评论页面并展开所有评论
driver.switch_to.window(driver.window_handles[-1])
comment_page = driver.find_element_by_xpath('//span[@data-reactid="5"]')
comment_page.click()
all_comment_btn = driver.find_element_by_xpath('//span[@data-reactid="23"]')
all_comment_btn.click()
# 循环爬取前3页评论信息
for j in range(3):
comments = driver.find_elements_by_xpath('//div[@class="comment_single"]')
for comment in comments:
# 获取评论信息
comment_name = comment.find_element_by_class_name('user_name').text
comment_date = comment.find_element_by_class_name('date').text
comment_score = comment.find_element_by_class_name('score').text
comment_text = comment.find_element_by_class_name('J_commentDetail').text
check_in_time = comment.find_element_by_xpath('.//span[contains(text(),"入住时间:")]/following-sibling::span').text
# 输出评论信息
print(comment_name, comment_date, comment_score, comment_text, check_in_time)
# 判断是否还有下一页评论
next_comment = driver.find_element_by_xpath('//a[@class="down"]')
if next_comment:
next_comment.click()
else:
break
# 返回酒店列表页
driver.close()
driver.switch_to.window(driver.window_handles[0])
# 判断是否还有下一个酒店
next_hotel = driver.find_element_by_xpath('//a[@class="down"]')
if next_hotel:
next_hotel.click()
else:
break
```
7. 关闭浏览器
```
driver.quit()
```
需要注意的是,爬虫程序应该尽可能地符合网站的使用规范,不要过分频繁地访问同一页面或者使用大量线程同时进行爬取,以免给网站带来不必要的压力和影响正常用户的使用。同时,也要注意保护用户隐私,不要将用户的评论信息公开或滥用。
阅读全文