import timefrom selenium import webdriverimport json#初始化webdriverdriver = webdriverChromeDchromedriverexe #定义url和headersurl = httpsmoviedoubancomsubject25868125commentsstart=&limit=20&status=P&sort=ne
代码有几个问题:
-
第11行需要使用
find_elements_by_css_selector,而不是find_element_by_css_selector,因为需要获取多个评论项。 -
第25行的
find_element_by_css_selector('comment-item')应该改为driver.find_elements_by_css_selector('.comment-item'),并且需要加上.。 -
第33行的
for item in comment_items:需要改为for item in comment_items:,因为comment_items是一个列表。 -
第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'
原文地址: http://www.cveoy.top/t/topic/g7l1 著作权归作者所有。请勿转载和采集!