'''一.目的是:爬取豆瓣某一电影电影多页短评,并将爬取到的用户名、评价、时间、评论写入json文件
二.流程是:
1.实例化对象,新建一个浏览器对象,并打开指定网页
2定位并点击‘全部短评’的链接按钮
3创建暂时存放数据的列表,aaa
4为方便多次运行程序,先清空需要写入的json文件
5进入循环,这里的循环是为了爬取多页评论
6休息5秒,这一步是非常重要的,也不能写在循环最后,因为selenium模拟点击下一页后需要时间加载页面,而程序会直接开始寻找元素,导致什么也没找到就开始点击下一页了
7定位所有评论
8进入循环,这里的循环是为了遍历第七步得到的评论列表
9提取用户、评价、时间、评论数据,并加入之前创建的aaa列表
10跳出这层循环
11定位并点击‘下一页’的链接按钮
12跳出这层循环
13将aaa列表中的数据写入json文件
三.代码'''
#用户名 评价 时间 星级
from selenium import webdriver
import time
import json
#使用selenium模拟点击影评‘全部’按钮
#爬取影评第一页
#获取用户名 评价 时间 星级 并保存在js文件中
#获取下一页
# 打开指定网页
driver = webdriver.Chrome() # 实例化对象,新建一个浏览器对象
driver.get('https://movie.douban.com/subject/30391186/?from=showing') # driver.get打开指定网页
#查找并点击评论‘全部’按钮
comment=driver.find_element_by_id('comments-section')
com_all=comment.find_element_by_class_name('pl')
com_all_a=com_all.find_element_by_tag_name('a')# 通过标签名查找
com_all_a.click() # click()点击选中的元素
#创建短评的列表
comments=[]
#清空json文件
with open("comment.json", 'w', encoding='utf-8')as f:
pass
#进入循环
aaa=eval(input('输入你要需要的影评页数:'))
for i in range(aaa):
#休息5秒,防止被墙,方便加载评论内容
time.sleep(5)
#定位所有短评元素
comment_elems = driver.find_elements_by_class_name('comment-item')
#提取用户 评价 时间 星级
for j in comment_elems:
#每个j为一条评论
#用户 评价 时间
head = j.find_element_by_class_name('comment-info')
#用户
com_user=head.find_element_by_tag_name('a')
#评价
com_rat=head.find_element_by_class_name('rating')
com_rating=com_rat.get_attribute('title')
#时间
com_t=head.find_element_by_class_name('comment-time')
com_time=com_t.get_attribute('title')
#评论
content=j.find_element_by_class_name('short')
#加入comments列表
comments.append({"用户名":com_user.text,"评级":com_rating,"时间":com_time,"评论":content.text})
print('第{}页评论获取成功'.format(i+1))
#点击下一页方便爬取
paginator = driver.find_element_by_id('paginator')
paginator_next = paginator.find_element_by_class_name('next')
paginator_next.click() # click()点击选中的元素
#写入json文件
#这里的‘a’是之前写错的,但是前面已经写了清空json文件,所以改不改也无所谓,懒得改了
with open('comment.json','a',encoding='utf_8')as f:
json.dump(comments,f,indent=4,ensure_ascii=False)
用selenuim库获取某一电影影评,并写入json文件
于 2023-06-15 19:37:06 首次发布
该文描述了一个使用Python的Selenium库爬取豆瓣电影页面的多页短评的过程,包括打开网页,点击全部短评,定位并提取用户评价、时间和评论内容,存储到JSON文件中。每爬取一页评论后会模拟点击下一页,确保所有数据正确抓取。
摘要由CSDN通过智能技术生成