代码有几个问题:

  1. 第11行需要使用find_elements_by_css_selector,而不是find_element_by_css_selector,因为需要获取多个评论项。

  2. 第25行的find_element_by_css_selector('comment-item')应该改为driver.find_elements_by_css_selector('.comment-item'),并且需要加上.

  3. 第33行的for item in comment_items:需要改为for item in comment_items:,因为comment_items是一个列表。

  4. 第40行需要加上try...except...语句,以避免找不到下一页按钮而导致程序异常退出。

修改后的代码如下:

import time from selenium import webdriver import json

#初始化webdriver driver = webdriver.Chrome('D:/chromedriver.exe')

#定义url和headers url = "https://movie.douban.com/subject/25868125/comments?start=&limit=20&status=P&sort=new_score" headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0'}

#打开网页 driver.get(url)

#定义一个空列表,用来保存所有评论 comments = []

#循环遍历网页,每一点一次“下一页”按钮就保存一次数据 while True: #等待网页加载完成 time.sleep(3) #获取所有评论项 comment_items = driver.find_elements_by_css_selector('.comment-item') #遍历所有评论项,保存每一条评论的信息 for item in comment_items: comment = { 'username':item.find_element_by_css_selector('.comment-info > a').text,#评论人的名称 'datetime':item.find_element_by_css_selector('.comment-info > span').text.strip(),#评论时间 'content':item.find_element_by_css_selector('.short').text#评论内容 }

    comments.append(comment)

try:
    #查找下一页按钮
    next_page_btn = driver.find_element_by_css_selector('.next')

    #如果下一页按钮不可以点击,则说明到了最后一页循环停止
    if 'disabled' in next_page_btn.get_attribute('class'):
        break

    #否则,点击下一页
    next_page_btn.click()
except:
    break

#关闭
driver.quit()

#将评论保存为json格式文件 with open('comments.json','w',encoding='utf-8') as f: json.dump(comments,f,ensure_ascii = False) print('Done'

import timefrom selenium import webdriverimport json#初始化webdriverdriver = webdriverChromeDchromedriverexe #定义url和headersurl = httpsmoviedoubancomsubject25868125commentsstart=&limit=20&status=P&sort=ne

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

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