用selenuim库获取某一电影影评,并写入json文件

该文描述了一个使用Python的Selenium库爬取豆瓣电影页面的多页短评的过程,包括打开网页,点击全部短评,定位并提取用户评价、时间和评论内容,存储到JSON文件中。每爬取一页评论后会模拟点击下一页,确保所有数据正确抓取。
摘要由CSDN通过智能技术生成

'''一.目的是:爬取豆瓣某一电影电影多页短评,并将爬取到的用户名、评价、时间、评论写入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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值