Hello Hello GIS辣妹来了,今天分享google map地点的评论抓取方法,抓取的评论可以用做NLP情感分析!
一、数据准备
我的网站数据表格如下,就是一个存储网站链接的,但是网站必须要是图2里面,一个location,左边就是这个location的review(因为我代码就是爬这个review,所以里面的容器是固定的,避免出错还是按照我这个弄)
二、代码部分
下面就是代码部分,记得装相应的包以及更改自己的网站表格存储路径。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
import pandas as pd
import time
# 使用webdriver-manager自动安装和配置ChromeDriver
service = Service(ChromeDriverManager().install())
# 启动Selenium WebDriver
driver = webdriver.Chrome(service=service)
# 读取Excel文件,假设文件名为'reviews.xlsx',里面的列名为'Website'
df = pd.read_excel('reviews.xlsx')
# 创建一个空的DataFrame来存储评论
output_df = pd.DataFrame()
# 遍历每个网址
for index, row in df.iterrows():
website = row['website']
# 打开目标页面
driver.get(website)
# 等待页面加载
time.sleep(5)
# 执行滚动以加载更多评论
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
# 获取页面HTML
html = driver.page_source
# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(html, 'html.parser')
# 使用类名找到评论区的评论内容
reviews = soup.find_all('span', class_='wiI7pd') # 使用检查到的类名 'wiI7pd' 获取评论
# 提取评论信息,存储在一个列表中
comments = []
for review in reviews:
comment = review.text.strip() # 获取评论文本并去掉首尾空格
comments.append(comment)
# 将评论加入到输出的DataFrame中
output_df.loc[index, 'Website'] = website
for i, comment in enumerate(comments):
output_df.loc[index, f'Review {i + 1}'] = comment # 将每条评论作为单独的列存储
# 关闭浏览器
driver.quit()
# 保存结果到Excel
output_df.to_excel('scraped_reviews.xlsx', index=False)
print("评论爬取并保存成功!")
三、运行以及结果
运行的时候会自动弹出下面的页面,就是在自动抓取之中了,因为webdriver-manager 会自动检测你系统上的 Chrome 浏览器版本,所以我们不需要在额外安装ChromeDriver,也不需要任何的初始化手段。最后运行的结果就是一个网址后面跟随多个review的列。
哇塞哇塞,给辣妹点个赞再走吧!