赞
踩
需要安装Selenium和scrapy的相关环境,否则运行不成功。
关键字:scrapy;selenium;UI界面;requests;
本项目采用了selenium技术,实现了通过模拟用户操作,来进行自动打开豆瓣电影页面、搜索指定电影、跳转至评论页面,并自动滚动加载评论内容,然后通过元素定位找到评论的url。主要功能包括模拟用户操作来输入电影名,并点击搜索按钮,再跳转至评论员页面。特点是可以自动化操作界面,能够处理动态网页,模拟用户的滚动操作,加载出更多评论内容。
这个项目也使用了 Scrapy 技术,目的是自动抓取豆瓣电影页面的内容。它的主要功能是对影评页面的 URL 进行封装,然后通过循环逐个抓取每个网页里的中文影评,然后通过管道进行下载保存为txt文件。这样做实现了对页面的高效抓取和数据提取。并且发送给item进行保存数据,然后通过管道进行下载并生成词云。特点是使用了 Scrapy 框架,它是一个强大的网络爬虫框架,具有高效的并发处理能力和稳定的网络请求机制。并且将爬虫的不同功能拆分成多个模块,如爬虫、管道、中间件等,使得代码结构清晰,易于维护和扩展。
本项目采用了 Tkinter 技术,实现了一个基于Python的用户界面。Tkinter是Python的标准GUI(图形用户界面)工具包,用于创建各种图形界面应用程序。其主要功能包括打开搜索窗口,用户可以在应用程序中输入电影名称进行搜索,然后执行搜索功能,如爬取电影评论等。Tkinter的特点是易于学习和使用,跨平台性强,可以在不同的操作系统上运行,且具有轻量级的特性,适合开发简单的GUI应用程序。通过Tkinter技术,本项目实现了一个简单而实用的用户界面,方便用户进行电影搜索和相关功能的使用。
本项目采用了scrapy框架的并发技术,实现了在单个事件循环中管理并发请求。它通过异步的方式发送请求。特点是高效地管理网络请求,同时避免了多线程并发可能带来的同步和状态管理问题。
包括流程、功能描述和核心代码
流程描述:
本项目通过UI界面为入口,通过用户的输入与点击进行电影的相关搜索并且启动爬虫进行数据的爬取并且处理爬取到的数据,最终给用户展示词云图片。
功能描述:
通过main文件进行运行,跳转至UI界面文件,在用户与界面进行交互的时,当用户输入电影名并点击搜索时,通过环境变量传入电影名,以此同时程序进入到scrapy框架当中。在框架当中,通过模拟浏览器操作来访问豆瓣电影网站并且获取JavaScript动态生成链接并放入列表当中,爬虫生成请求通过传输后下载器返货响应,爬虫进行数据的爬取并处理数据,最终将获取到的评论放入文件中,爬取到所需的评论后关闭爬虫时对最终获得的评论进行词云的生成并且展示。
图 2-1 scrapy框架示意图
scrapy 各组件执行顺序_scrapy pipeline执行完一个再执行第二个么-CSDN博客
核心代码:
(1)selenium进行模拟浏览器行为,得到影评界面的url:
图2-2 selenium模拟浏览器运行
这段代码是使用Python的Selenium库进行网页自动化操作,目的是在豆瓣电影网站上搜索特定的电影,然后点击第一个搜索结果,最后点击该电影的影评的更多按钮,进入到更多影评的界面。通过此方法我们可以绕过很多困难的解析,比如下面那个搜索页的页面资源获取:
图2-3 搜索页页面获取难题
页面资源通过JavaScript来动态生成,且进行了复杂的加密,通过JS逆向的方法很难进行,正因如此,我们才转变思路,运用selenium库进行点击第一个搜索到的电影进入电影影评界面,省去了很多没必要的工作。
(2)requests和BeautifulSoup库对影评页面进行请求并处理得到要请求的影评JS链接:
图2-4 获取js链接
此代码用来对影评页进行分析处理,运用for循环进行指定页数爬取,每页20条影评,requests及beautifulsoup请求页面代码及处理,然后提取出相应需要的链接,将链接存于列表中。
图2-5 处理js链接及存储
将list列表中的链接进行处理,得到我们所需要请求的实际链接。通过代码处理,我们将list链接里的review_id进行重新链接整合,得到实际要请求的url列表list1,列表中即下图的request url,是通过JavaScript动态生成的,所以我们需要请求得到里面的影评完整内容。
图2-6 实际url展示
后续运用scrapy框架进行对list1中的JS链接进行请求,使请求速度更快。
(3)scrapy框架对影评链接进行请求得到影评全部内容:
在settings中设置了同时发送的HTTP请求数和下载器延迟的秒数以控制爬虫下载网页得到速度。
图2-7 设置延时与并发数量
图 2-9 对json的转换和评论提取
在start_requests中首先将获取到的链接作为请求交给下载器,在parse函数获取到响应报文后使用json.load将json对象转为字典,然后获取html键下的值,即评论,将字典返回到pipelines文件中后将数据管道将评论放入txt文件中。
图 2-10 处理获得的item字典
当结束爬虫的时候将爬取到的txt文件进行词云的生成,这里词云的生成使用到了stopwords将一些中文中的常见语气词类的字和词进行过滤以保证词云能展示出评论的核心关键词,紧接着将得到的词云图片通过创建图形窗口进行展示。
停止词的作用如下博客所示
https://blog.csdn.net/luoluopan/article/details/114297744
图2-11 关闭爬虫时生成词云图
(4)UI界面:
图2-12 设计初始界面
图2-13 初始化界面
图2-15 界面切换
首先第一个界面中的开始使用按钮对应的指令是打开搜索的界面
图2-15 搜索界面实例
图2-16
图2-17
第二个窗口中的文本输入框对应的命令是启动爬虫并且生成词云图片,因此当用户输入完电影名字后,show_wordcloud将这个用户输入的电影名存储到环境变量中,该环境变量配合selenium模拟打开浏览器中指定电影的评论区,从而能够实现用户能够指定电影并爬取相关评论的效果,紧接着使用scrapy.cmdline模块中的execute命令启动scrapy爬虫框架。
演示软件截图
图 3-1 UI界面截图
图 3-2 UI界面截图
图 3-3 词云图片展示截图
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。