豆瓣电影《穿靴子的猫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()

代码说明

  1. 导入相关库: 导入 Selenium、BeautifulSoup、time 和 json 库,用于网页爬取、数据解析、时间控制和数据保存。
  2. 动态网页爬取操作
    • 创建浏览器对象:使用 webdriver.Chrome() 创建一个 Chrome 浏览器对象。
    • 访问url地址:使用 browser.get(url) 访问目标网页。
    • 定位元素并点击:使用 browser.find_element_by_xpath() 定位 '全部影评' 按钮,并使用 ActionChains 模块点击该按钮,进入全部影评页面。
  3. 网页数据分析及数据抓取
    • 请求头提取:设置请求头,模拟浏览器访问。
    • 发送请求并获得网页数据:使用 browser.page_source 获取网页源代码。
    • 解析网页结构:使用 BeautifulSoup 解析网页结构,方便定位目标数据。
    • 定位评论人名称、评论时间和评论内容:使用 soup.find_all() 查找所有评论元素,并提取评论人名称、评论时间和评论内容。
  4. 多页网址数据抓取
    • 初始页面url确定:定义初始页面 url,并使用字符串格式化方法添加分页参数。
    • 页面翻页规律设置:使用 start 变量控制翻页参数,每次循环增加 20,对应豆瓣影评每页 20 条评论。
    • 遍历页面循环:循环访问每个页面,提取评论数据,并判断是否到达最后一页。
  5. 保存数据
    • 文件数据写入:使用 json.dump() 将数据列表保存到 JSON 文件中。

注意事项

  • 该爬虫代码仅供学习参考,不得用于商业用途。
  • 爬虫行为可能违反网站的使用协议,使用时需谨慎。
  • 爬取速度过快可能导致网站封禁,建议设置合理的爬取间隔。
  • 请注意爬取过程中可能遇到的各种错误,例如网页结构变化、网站反爬虫措施等。

扩展

  • 可以根据需求添加其他数据字段,例如评论评分、点赞数等。
  • 可以将爬取的数据进行更深入的分析,例如情感分析、主题分析等。
  • 可以使用其他爬虫框架,例如 Scrapy,更高效地进行网页爬取。

希望本代码能帮助您学习网页爬取技术,并用于您的学习和研究!


原文地址: https://www.cveoy.top/t/topic/oA6D 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录