豆瓣电影《穿靴子的猫2》影评数据爬取代码
豆瓣电影《穿靴子的猫2》影评数据爬取代码
本代码使用Selenium和BeautifulSoup库抓取豆瓣电影《穿靴子的猫2》所有页面的影评数据,包括评论人名称、评论时间和评论内容,并以JSON格式保存到本地文件。
代码说明
# 导入相关库
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from bs4 import BeautifulSoup
import time
import json
# 动态网页爬取操作
# 创建浏览器对象
browser = webdriver.Chrome()
# 访问url地址
url = 'https://movie.douban.com/subject/25868125/'
browser.get(url)
# 定位元素并点击(借助Selenium库,点击进入电影全部影评)
more_button = browser.find_element_by_xpath('//*[@id='reviews']/div[1]/a')
ActionChains(browser).move_to_element(more_button).click(more_button).perform()
time.sleep(2) # 等待页面加载
# 网页数据分析及数据抓取
# 请求头提取
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'
}
# 发送请求并获得网页数据
html = browser.page_source
# 解析网页结构
soup = BeautifulSoup(html, 'html.parser')
# 定位评论人名称、评论时间和评论内容
reviews = soup.find_all('div', class_='review-item')
data_list = []
for review in reviews:
name = review.find('a', class_='name').text.strip()
time = review.find('span', class_='main-meta').text.strip()
content = review.find('div', class_='review-content').text.strip()
data = {
'name': name,
'time': time,
'content': content
}
data_list.append(data)
# 多页网址数据抓取
# 初始页面url确定
url = 'https://movie.douban.com/subject/25868125/reviews?start={}&sort=time&status=P'
# 页面翻页规律设置
start = 0
while True:
# 遍历页面循环
browser.get(url.format(start))
time.sleep(2) # 等待页面加载
html = browser.page_source
soup = BeautifulSoup(html, 'html.parser')
# 判断是否到达最后一页
if soup.find('span', class_='next') is None:
break
else:
start += 20
reviews = soup.find_all('div', class_='review-item')
for review in reviews:
name = review.find('a', class_='name').text.strip()
time = review.find('span', class_='main-meta').text.strip()
content = review.find('div', class_='review-content').text.strip()
data = {
'name': name,
'time': time,
'content': content
}
data_list.append(data)
# 保存数据
# 文件数据写入
with open('reviews.json', 'w', encoding='utf-8') as f:
# 文件定义json格式
json.dump(data_list, f, ensure_ascii=False, indent=4)
# 关闭浏览器
browser.quit()
代码说明
- 导入相关库: 导入 Selenium、BeautifulSoup、time 和 json 库,用于网页爬取、数据解析、时间控制和数据保存。
- 动态网页爬取操作
- 创建浏览器对象:使用
webdriver.Chrome()创建一个 Chrome 浏览器对象。 - 访问url地址:使用
browser.get(url)访问目标网页。 - 定位元素并点击:使用
browser.find_element_by_xpath()定位 '全部影评' 按钮,并使用ActionChains模块点击该按钮,进入全部影评页面。
- 创建浏览器对象:使用
- 网页数据分析及数据抓取
- 请求头提取:设置请求头,模拟浏览器访问。
- 发送请求并获得网页数据:使用
browser.page_source获取网页源代码。 - 解析网页结构:使用 BeautifulSoup 解析网页结构,方便定位目标数据。
- 定位评论人名称、评论时间和评论内容:使用
soup.find_all()查找所有评论元素,并提取评论人名称、评论时间和评论内容。
- 多页网址数据抓取
- 初始页面url确定:定义初始页面 url,并使用字符串格式化方法添加分页参数。
- 页面翻页规律设置:使用
start变量控制翻页参数,每次循环增加 20,对应豆瓣影评每页 20 条评论。 - 遍历页面循环:循环访问每个页面,提取评论数据,并判断是否到达最后一页。
- 保存数据
- 文件数据写入:使用
json.dump()将数据列表保存到 JSON 文件中。
- 文件数据写入:使用
注意事项
- 该爬虫代码仅供学习参考,不得用于商业用途。
- 爬虫行为可能违反网站的使用协议,使用时需谨慎。
- 爬取速度过快可能导致网站封禁,建议设置合理的爬取间隔。
- 请注意爬取过程中可能遇到的各种错误,例如网页结构变化、网站反爬虫措施等。
扩展
- 可以根据需求添加其他数据字段,例如评论评分、点赞数等。
- 可以将爬取的数据进行更深入的分析,例如情感分析、主题分析等。
- 可以使用其他爬虫框架,例如 Scrapy,更高效地进行网页爬取。
希望本代码能帮助您学习网页爬取技术,并用于您的学习和研究!
原文地址: https://www.cveoy.top/t/topic/oA6D 著作权归作者所有。请勿转载和采集!