300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > python电影评论的情感分析流浪地球_《流浪地球》影评分析(一):使用Python爬取豆瓣

python电影评论的情感分析流浪地球_《流浪地球》影评分析(一):使用Python爬取豆瓣

时间:2022-03-26 18:06:44

相关推荐

python电影评论的情感分析流浪地球_《流浪地球》影评分析(一):使用Python爬取豆瓣

本文爬虫的步骤:

使用Selenium库的webdriver进行网页元素定位和信息获取;

使用BeautifulSoup库进行数据的提取;

使用Pandas库进行数据的存储。

后台回复python爬虫可获取PPT和影评数据。

《流浪地球》大年初一在内陆上映,也快一个月了。上映以来,票房一路高升。前几日,《流浪地球》已经超过40亿了,跃居中国电影票房总榜第二了。对于这部电影,好评也有,争议也有,微博上热点也是不断。本来之前就想自己用Python爬虫爬取一下豆瓣影评,再做做数据分析。不过这几天都没有来得及弄。这电影都要下了,我才来蹭这个热点,这个热度估计是蹭不上了。

这个周末主要写了一部分爬虫代码爬取了豆瓣影评,先在公众号上记录下来。下周如果有时间的话,会接着使用爬取到的影评数据,进行简单的数据处理和数据分析。

这部分Python爬虫主要使用了两个库,Selenium库和BeautifulSoup库。

在进行爬虫之前,需要先了解到几个概念,微信后台回复python爬虫,可获取到我一年多前学习爬虫时做的一份PPT分享(其实PPT比较简单,更具体的教程可自行百度)。目前爬虫程序还在继续,现在保存了60000条豆瓣影评数据,后台一并分享。

PPT截图

爬取的数据存储格式如下:

想更深入学习爬虫的,推荐一本入门教程:《Python网络数据采集》,内容详尽,而且简单易懂。

以下为爬虫的简单说明和代码。

其实一般的爬虫流程很简单:

1、发送http请求,获取网络源码

一般这一部分调用urllib.request库就好。由于本文爬取豆瓣影评数据要登录个人豆瓣账号,所以我改用Selenium库的webdriver来调用浏览器访问豆瓣网进行数据的抓取。注:在此之前,需要自行下载驱动webdriver。本文使用的浏览器是chrome,不同版本对应的webdriver可在以下网址下载:

http://chromedriver./index.html

或者

/mirrors/chromedriver

2、网页解析

对于网页解析,需要了解HTML这个概念,同时需要知道:标签(Tag)、属性(Attribute)。使用Python进行页面解析和数据提取,一般可使用re库正则表达式处理。或者使用BeautifulSoup库,该库提供了很便利的函数,可以直接根据标签、属性名、属性值等定位到网页元素,提取相应的内容。

那么如何找到我们需要抓取的网页内容在HTML中对应的标签路径呢?可借助开发者工具,打开浏览器,按快捷键F12。在弹出的窗口右上角,点击箭头图标,如下图红框:

之后我们就可以在浏览器左侧用鼠标选择或点击网页内容,在右侧的开发者工具栏就能定位到相应的HTML内容了。

3、数据处理保存。

数据的处理和保存很简单,本文直接使用Pandas库保存为xlsx格式。

#-*-coding:utf-8-*-

"""

CreatedonSatFeb1613:04:52

@author:A

爬取《流浪地球》的豆瓣影评

"""

frombs4importBeautifulSoup

importpandasaspd

fromseleniumimportwebdriver

importtime

importrequests

importurllib.parse

importre

#############未登录状态下的豆瓣影评抓取,未登录状态下可浏览20个页面

##步骤一:分析url规律,分析数据所在的网页源码,使用浏览器,打开开发者工具(Chrome浏览器快捷键为F12)

#豆瓣电影网页《流浪地球》的短评url:

#第1-20条评论所在页:/subject/26266893/comments?status=P

#第21-40条短评所在页:/subject/26266893/comments?start=20&limit=20&sort=new_score&status=P

#第41-60条短评所在页:/subject/26266893/comments?start=40&limit=20&sort=new_score&status=P

#规律:只要修改参数start,一个url存放20条短评。start以20递增

#目前豆瓣限制爬虫,登录状态下,每分钟允许发起40个请求,每个请求20条短评。

#合理限制时间的化,一个小时可采集48000条短评。

#start=0

#end_page=20#爬取50000个页面

#limit=20#每页20个短评

##步骤二:获取网页源码

#defget_html(start,limit,end_page):

#headers={

#'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/68.0.3440.106Safari/537.36'

#}

#foriinrange(end_page):

#params={

#'start':str(start+limit*i),

#'limit':str(limit),

#'sort':'new_score',

#'status':'P'}

#base_url='/subject/26266893/comments?'

#url=base_url+urllib.parse.urlencode(params)

#try:

#response=requests.get(url,headers=headers,timeout=10)

#data=response.text

#pattern=pile(r'

(.*?)',re.S)

#ifre.findall(pattern,data)!=[]:

#withopen(r'E:\Python\data\liulangdiqiu\2.txt','a',encoding='utf-8')asfile:

#file.write(data)

#print('采集第%d页评论成功!'%(i+1))

#else:

#print('采集第%d页评论失败!超过访问页面限制!'%(i+1))

#except:

#print('采集第%d页评论失败!'%(i+1))

#time.sleep(1.5)

#returnNone

#if__name__=='__mian__':

#get_html(start,limit,end_page)

##

##########################以下为登录状态豆瓣影评的抓取

end_page=50000

##使用selenium模拟浏览器登陆

#需要下载安装chromedriver

driver=webdriver.Chrome("C:\\Users\\A\\Downloads\\chromedriver_win32_1\\chromedriver.exe")

driver.get("/passport/login")

time.sleep(3)

username_login=driver.find_elements_by_css_selector('li.account-tab-account')[0]#找到密码登录

username_login.click()

time.sleep(3)

driver.find_element_by_id("username").send_keys("你的账号")

driver.find_element_by_id("password").send_keys("你的密码")

driver.find_element_by_link_text("登录豆瓣").click()

time.sleep(3)

driver.find_element_by_link_text("电影").click()#运行至此,chrome开启一个新的子窗口,跳转到豆瓣电影

##chromewebdriver支持多窗口切换

#driver.current_window_handle#获得当前窗口句柄

#driver.window_handles#返回所以窗口的句柄到当前会话

driver.switch_to_window(driver.window_handles[1])#切换窗口函数

driver.find_element_by_id("inp-query").send_keys("流浪地球")#在搜索输入流浪地球

driver.find_element_by_class_name("inp-btn").click()

time.sleep(3)

driver.find_element_by_class_name("title-text").click()#进入流浪地球页面

time.sleep(3)

driver.find_element_by_id("comments-section").find_element_by_partial_link_text("全部").click()#进入全部评价页面

time.sleep(5)

##解析网页

##爬取评价人name、打分score、赞同人数vote、时间score_time、评价内容comment

name=[]

name_href=[]

score=[]

vote=[]

score_time=[]

comment=[]

foriinrange(end_page):

##使用beautifulsoup库进行html页面解析,当然也可以自行使用正则表达式进行提取

bs=BeautifulSoup(driver.page_source,"html.parser")

comments=bs.findAll("div",class_="comment-item")

forcincomments:

vote.append(int(c.find("span",class_="votes").get_text().strip()))#获取赞同人数,即该评论多少人觉得有用。

name.append(c.find("span",class_="comment-info").find("a").get_text())#获取评论人名字,使用get_text()提取标签的文本内容

name_href.append(c.find("div",class_="avatar").find("a").get("href"))#获取评价人的主页链接,后续可能继续爬取评价人信息

try:

score.append(c.find("span",class_=pile("allstar")).get("title"))#获取评分,评分存放在title属性中的,使用get()提取属性值

except:

score.append("")#未评分的

#此处应该注意,一颗星评价对应class值为allstar10rating,title为很差。一到五颗星的对应值如下:

#一颗星,allstar10rating,很差

#二颗星,allstar20rating,较差

#三颗星,allstar30rating,还行

#四颗星,allstar40rating,推荐

#五颗星,allstar50rating,力荐

score_time.append(c.find("span",class_="comment-time").get_text().strip())

try:

comment.append(c.find("span",class_="short").get_text())

except:

comment.append("")

print('采集第%d页评论成功'%(i+1))

try:

driver.find_element_by_class_name("next").click()

except:

break

time.sleep(2)

ifi%20==0:

time.sleep(10)#控制速度,每20页再休息一下10s

ifi==3000:

data=pd.DataFrame({"评价人":name,"评价人链接":name_href,"时间":score_time,"评分":score,"赞同人数":vote,"评价内容":comment})

data.to_excel(r"E:\Python\data\liulangdiqiu\comments.xlsx",encoding="utf-8",)

driver.quit()

##保存数据

data=pd.DataFrame({"评价人":name,"评价人链接":name_href,"时间":score_time,"评分":score,"赞同人数":vote,"评价内容":comment})

data.to_excel(r"E:\Python\data\liulangdiqiu\comments.xlsx",encoding="utf-8",)

python电影评论的情感分析流浪地球_《流浪地球》影评分析(一):使用Python爬取豆瓣影评...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。