使用 Python 爬取酒店用户评论数据
这段代码使用了 Selenium 和 BeautifulSoup 库来爬取某个酒店的用户评论信息。具体流程如下:
-
设置请求头,指定要爬取的网页链接。
-
创建 Chrome 浏览器对象,并打开网页。
-
解析页面,使用 BeautifulSoup 库查找指定的 HTML 标签,提取需要的数据,并将其存储到一个字典中。
-
判断是否还有下一页,如果有,则点击下一页按钮,等待页面加载完成后继续解析。
-
当所有页面都被爬取完毕后,关闭浏览器,并打印出爬取到的评论数据和数量。
这段代码报错是因为 Chrome 浏览器的路径没有正确设置。可以通过修改浏览器路径来解决这个问题。如果想使用火狐浏览器,需要先下载 Firefox 的驱动 geckodriver,并将其路径添加到系统环境变量中。
获取浏览器路径可以通过在命令行中输入 where chrome 或 where firefox 来查看。如果浏览器没有添加到系统环境变量中,则需要手动指定其路径。
import requests
from bs4 import BeautifulSoup
import pandas as pd
from selenium import webdriver
import time
# 设置请求头
count = 0
review_dict = {}
url = 'https://www.booking.cn/hotel/cn/chengdu-tuo-ban-xie-qing-nian-lv-she.zh-cn.html#tab-reviews'
# 创建浏览器对象
browser = webdriver.Chrome()
# 打开网页
browser.get(url)
# 等待页面加载完成
time.sleep(1)
while True:
# 解析页面
soup = BeautifulSoup(browser.page_source, 'html.parser')
review_tags = soup.find_all('li', {'class': 'review_list_new_item_block'})
# review_tags=soup.select('div.review_item_review_content')
print(review_tags)
for review in review_tags:
try:
count += 1
pos = review.find('span', {'class': 'c-review__prefix c-review__prefix--color-green'})
review_pos = pos.find('span', {'class': 'c-review__body'}).text.strip() if pos else '无'
review_staydate = review.find('span', {'class': 'c-review-block__date'}).text.strip()
neg = review.find('span', {'class': 'c-review__prefix'})
review_neg = neg.find('span', {'class': 'c-review__body'}).text.strip() if neg else '无'
review_title = review.find('span', {'class': 'c-review-block__title c-review__title--ltr'}).text.strip()
review_dict[f'客户{count}' + review_staydate] = [review_title, review_neg, review_pos]
except:
continue
# 判断是否还有下一页
next_button = browser.find_element_by_css_selector('a#review_next_page_link')
if next_button.get_attribute('class') == 'disabled':
break
# 点击下一页
next_button.click()
# 等待页面加载完成
time.sleep(1)
# 关闭浏览器
browser.quit()
print(review_dict)
print(len(review_dict))
原文地址: https://www.cveoy.top/t/topic/nQfm 著作权归作者所有。请勿转载和采集!