分析需求:针对大年初一(2021年2月12日)同一天上映的7部电影进行分析,分析影响电影票房高低的原因,分析电影票房的相关性因素,并分析总票房前三电影的影评内容。最终得出报告结论并对电影的拍摄提供参考建议。
分析流程图:
爬取豆瓣网你好李焕英的影评
通过对豆瓣网址的结构分析可知,链接到不同电影影评网址的区别是电影代码不同,并且第一页和下一页的区别就是 start=20&limit=20 ,当我们知道了这个结构之后就可以爬取相对应的影评内容了。如图(以你好,李焕英和唐探3为例):
以爬取豆瓣网你好李焕英的影评内容为例:
#需求-----爬取豆瓣网你好李焕英的影评
# MovieName = '你好,李焕英'
import requests
from lxml import etree
import time
base_url = 'https://movie.douban.com/subject/34841067/comments?start={}&limit=20&status=P&sort=new_score'
#构造请求头,防止反爬
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36'}
#爬取影评内容
def Spider_Comment():
my_comment_list = []
for i in range(0,10):
url_all = base_url.format(i*20)
response = requests.get(url=url_all,headers=headers)
#设置时间间隔,网址IP被ban
time.sleep(10)
#获取爬取结果
result_str = response.content.decode('utf-8')
result_str = str(result_str)
#将结果转换成xpath可以解析的类型
html = etree.HTML(result_str)
#用xpath进行解析
review_contents = html.xpath('//span[@class="short"]/text()')
my_comment_list.append(review_contents)
return my_comment_list
result_comment = Spider_Comment()
result_comment
result_comment = str(result_comment)
# 保存文件
with open(r'D:\Data_analysis\program_movie\review_li3.text','w',encoding='utf-8') as f:
f.write(result_comment)
f.close()
若想爬取观众影评的时间,只需找到对应的标签层级,用xpath相对路径的方式就可以取到。
#爬取影评时间
def Spider_Comment_time():
comment_time_list = []
for i in range(0,10):
url_all = base_url.format(i*20)
response = requests.get(url=url_all,headers=headers)
time.sleep(10)
result_str = response.content.decode('utf-8')
result_str = str(result_str)
html = etree.HTML(result_str)
for j in range(1,20):
#找到影评时间的xpath相对路径,并用xpath解析
review_time = html.xpath('//*[@id="comments"]/div[{}]/div[2]/h3/span[2]/span[3]/@title'.format(j))
comment_time_list.append(review_time)