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

本教程使用Python爬虫技术,利用Selenium库抓取豆瓣电影《穿靴子的猫2》的前三页影评数据,包括评论人名称、评论时间和评论内容,并将数据存储为JSON格式。

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

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

pip install selenium

然后,需要下载对应浏览器的驱动,以Chrome浏览器为例,可以在以下地址下载对应版本的驱动:

http://chromedriver.chromium.org/downloads

下载完成后,将驱动解压到一个路径下,并将该路径添加至系统环境变量中。

接下来,可以使用以下代码使用Selenium库模拟浏览器,点击进入电影全部影评:

from selenium import webdriver

driver = webdriver.Chrome() #打开Chrome浏览器
driver.get('https://movie.douban.com/subject/25868125/') #进入电影页面

#点击“全部影评”按钮
all_comment_btn = driver.find_element_by_xpath('//div[@id="comments-section"]//a[@class="more"]')
all_comment_btn.click()

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

接下来,需要从第一页开始抓取评论数据。可以使用以下代码抓取第一页的评论人名称、评论时间以及评论:

import time

comments_data = [] #存储所有评论数据

#抓取第一页的评论数据
url = 'https://movie.douban.com/subject/25868125/comments?start=0&limit=20&status=P&sort=new_score'
driver.get(url)
time.sleep(2)

comments = driver.find_elements_by_xpath('//div[@class="comment-item"]') #找到所有评论
for comment in comments:
    name = comment.find_element_by_xpath('.//span[@class="comment-info"]/a').text
    date = comment.find_element_by_xpath('.//span[@class="comment-time "]/a/@title').text
    content = comment.find_element_by_xpath('.//span[@class="short"]').text
    
    comment_data = {
        'name': name,
        'date': date,
        'content': content
    }
    
    comments_data.append(comment_data)

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

接下来,可以使用循环抓取2-3页的评论数据,并将其添加至comments_data列表中:

for start in range(20, 40, 20): #抓取第2-3页的评论数据
    url = 'https://movie.douban.com/subject/25868125/comments?start={}&limit=20&status=P&sort=new_score'.format(start)
    driver.get(url)
    time.sleep(2)

    comments = driver.find_elements_by_xpath('//div[@class="comment-item"]') #找到所有评论
    for comment in comments:
        name = comment.find_element_by_xpath('.//span[@class="comment-info"]/a').text
        date = comment.find_element_by_xpath('.//span[@class="comment-time "]/a/@title').text
        content = comment.find_element_by_xpath('.//span[@class="short"]').text

        comment_data = {
            'name': name,
            'date': date,
            'content': content
        }

        comments_data.append(comment_data)

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

最后,可以使用以下代码将抓取到的数据以json格式存储到文件中:

import json

with open('comments.json', 'w', encoding='utf-8') as f:
    json.dump(comments_data, f, ensure_ascii=False)

完整代码如下:

from selenium import webdriver
import time
import json

driver = webdriver.Chrome()
driver.get('https://movie.douban.com/subject/25868125/')
all_comment_btn = driver.find_element_by_xpath('//div[@id="comments-section"]//a[@class="more"]')
all_comment_btn.click()

comments_data = []

for start in range(0, 40, 20):
    url = 'https://movie.douban.com/subject/25868125/comments?start={}&limit=20&status=P&sort=new_score'.format(start)
    driver.get(url)
    time.sleep(2)

    comments = driver.find_elements_by_xpath('//div[@class="comment-item"]')
    for comment in comments:
        name = comment.find_element_by_xpath('.//span[@class="comment-info"]/a').text
        date = comment.find_element_by_xpath('.//span[@class="comment-time "]/a/@title').text
        content = comment.find_element_by_xpath('.//span[@class="short"]').text

        comment_data = {
            'name': name,
            'date': date,
            'content': content
        }

        comments_data.append(comment_data)

with open('comments.json', 'w', encoding='utf-8') as f:
    json.dump(comments_data, f, ensure_ascii=False)

driver.quit()

注意:

  • 代码中使用的XPath路径可能需要根据豆瓣电影网站的页面结构进行调整。
  • 为了防止被豆瓣电影网站反爬虫机制识别,建议在抓取数据时设置适当的延时。
  • 爬取网站数据时请注意遵守网站的使用规则,不要过度爬取,以免造成服务器负担。
  • 本教程仅供学习交流使用,请勿用于任何商业用途。

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

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