使用Selenium爬取《穿靴子的猫2》豆瓣电影影评数据

本文将介绍如何使用Selenium库爬取《穿靴子的猫2》在豆瓣电影上的所有页的影评数据。具体步骤如下:

步骤1:借助Selenium库,点击进入电影全部影评

首先需要安装Selenium库,可以通过以下命令进行安装:

pip install selenium

然后,可以通过以下代码实现点击进入电影全部影评:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 使用Chrome浏览器
driver = webdriver.Chrome()

# 打开豆瓣电影页面
driver.get('https://movie.douban.com/subject/25868125/')

# 点击“全部影评”按钮
button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#reviews-wrapper > div.mod-hd > h2 > span.pl > a')))
button.click()

步骤2:从'https://movie.douban.com/subject/25868125/comments?start=0&limit=20&status=P&sort=new_score'地址开始,抓取第一页的评论人名称、评论时间以及评论。

通过以下代码抓取第一页的评论人名称、评论时间以及评论:

import re

# 定位到评论区的iframe
driver.switch_to.frame(driver.find_element_by_css_selector('#content > div > div.article > div > div.review > div.mod-hd > h2 > span.ph'))
# 获取第一页中所有评论
comments = driver.find_elements_by_css_selector('div.comment-item')

# 遍历每一条评论,获取评论人名称、评论时间和评论
for comment in comments:
    # 评论人名称
    name = comment.find_element_by_css_selector('div.avatar > a').get_attribute('title')
    # 评论时间
    time = comment.find_element_by_css_selector('div > h3 > span.comment-info > span.comment-time').get_attribute('title')
    # 评论
    content = comment.find_element_by_css_selector('div > p').text
    # 去除换行符和空格
    content = re.sub('\n| ', '', content)
    print(name, time, content)

以上代码中,通过定位到评论区的iframe,然后获取第一页中所有评论,并遍历每一条评论,获取评论人名称、评论时间和评论。由于评论中可能会存在换行符和空格,所以需要使用正则表达式去除。

步骤3:继续抓取2-3页的所有评论人名称、评论时间以及评论。

可以通过以下代码抓取2-3页的所有评论人名称、评论时间以及评论:

import time

# 遍历2-3页
for i in range(1, 3):
    # 构造url
    url = 'https://movie.douban.com/subject/25868125/comments?start={}&limit=20&status=P&sort=new_score'.format(i * 20)
    # 打开url
    driver.get(url)
    # 定位到评论区的iframe
    driver.switch_to.frame(driver.find_element_by_css_selector('#content > div > div.article > div > div.review > div.mod-hd > h2 > span.ph'))
    # 获取当前页所有评论
    comments = driver.find_elements_by_css_selector('div.comment-item')
    # 遍历每一条评论,获取评论人名称、评论时间和评论
    for comment in comments:
        # 评论人名称
        name = comment.find_element_by_css_selector('div.avatar > a').get_attribute('title')
        # 评论时间
        time = comment.find_element_by_css_selector('div > h3 > span.comment-info > span.comment-time').get_attribute('title')
        # 评论
        content = comment.find_element_by_css_selector('div > p').text
        # 去除换行符和空格
        content = re.sub('\n| ', '', content)
        print(name, time, content)
    # 等待页面加载完成
    time.sleep(1)

# 关闭浏览器
driver.quit()

以上代码中,通过循环构造url,然后打开url,获取当前页所有评论,并遍历每一条评论,获取评论人名称、评论时间和评论。由于每次打开url需要等待页面加载完成,所以需要使用time.sleep()方法等待1秒。

步骤4:将抓取到的数据以文件存储的方式,存储为json格式数据。

将抓取到的数据以文件存储的方式,存储为json格式数据,可以通过以下代码实现:

import json

# 存储数据的列表
data = []

# 遍历2-3页
for i in range(1, 3):
    # 构造url
    url = 'https://movie.douban.com/subject/25868125/comments?start={}&limit=20&status=P&sort=new_score'.format(i * 20)
    # 打开url
    driver.get(url)
    # 定位到评论区的iframe
    driver.switch_to.frame(driver.find_element_by_css_selector('#content > div > div.article > div > div.review > div.mod-hd > h2 > span.ph'))
    # 获取当前页所有评论
    comments = driver.find_elements_by_css_selector('div.comment-item')
    # 遍历每一条评论,获取评论人名称、评论时间和评论
    for comment in comments:
        # 评论人名称
        name = comment.find_element_by_css_selector('div.avatar > a').get_attribute('title')
        # 评论时间
        time = comment.find_element_by_css_selector('div > h3 > span.comment-info > span.comment-time').get_attribute('title')
        # 评论
        content = comment.find_element_by_css_selector('div > p').text
        # 去除换行符和空格
        content = re.sub('\n| ', '', content)
        # 存储数据到列表
        data.append({'name': name, 'time': time, 'content': content})

    # 等待页面加载完成
    time.sleep(1)

# 关闭浏览器
driver.quit()

# 将数据存储为json格式文件
with open('comments.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False)

以上代码中,通过循环遍历每一条评论,并将评论人名称、评论时间和评论存储到列表中。最后,使用json.dump()方法将数据存储为json格式文件。

注意:

  1. 运行以上代码之前,需要确保已经安装了Selenium库和Chrome浏览器驱动。
  2. 以上代码仅抓取了2-3页的影评数据,如果需要抓取所有页面的数据,需要修改代码中的循环条件。
  3. 抓取数据时,请遵守豆瓣电影网站的使用规则,避免过度抓取造成服务器负担。

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

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