Python 爬虫实战:使用 Selenium 抓取酒店评论信息
这段代码使用 Selenium 模拟浏览器请求,爬取某个酒店的评论信息。首先创建一个浏览器对象,打开指定的网页,等待页面加载完成后,解析页面,获取评论信息并存储在一个字典中。然后判断是否还有下一页评论,如果有就点击下一页按钮,等待页面加载完成后继续解析评论信息。最后关闭浏览器。
这段代码可能会报错“WebDriverException: unknown error: cannot find Chrome binary”,是因为在创建浏览器对象时需要指定 Chrome 浏览器的路径,如果没有指定或者指定错误,就会报这个错。可以通过指定 Chrome 浏览器的路径来解决这个问题。例如:
browser = webdriver.Chrome('/usr/bin/google-chrome')
其中 '/usr/bin/google-chrome' 是 Chrome 浏览器的路径。
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/nQe8 著作权归作者所有。请勿转载和采集!