Python爬取猫眼电影榜单评分,以及评论

猫眼电影评论爬取

【目标】
(1)爬取榜单电影名称以及评分,简单的数据可视化
(2)爬取《 你好,李焕英》的评论,用词云显示

第一步:了解反爬机制:
1.请求过多,ip地址会被封掉24h。
2. User-Agent要频繁更换

第二步:如何避免反爬:
1.使用虚拟ip(网站:https://h.shenlongip.com/index/index.html,注册可领取500ip)。
2. 引入fake-useragent,配合random函数。

第三步:确定URL地址
(1)猫眼榜单URL:

https://maoyan.com/board

(2)你好李焕英页面URL:

https://maoyan.com/films/1299372

第四步:
一:获取榜单电影名称,以及评分
在这里插入图片描述
1.分析网页源代码
在这里插入图片描述
使用正则表达式

<dd>.*?<a href=.*? title="(.*?)" class="image-link".*?<p class="score"><i class="integer">(.*?)</i><i class="fraction">(.*?)</i>

代码实现:

def parse_html_one(self,one_url):       
        one_regex = '<dd>.*?<a href=.*? title="(.*?)" class="image-link".*?<p class="score"><i class="integer">(.*?)</i><i class="fraction">(.*?)</i>'
        one_html = self.get_html(url=one_url)
        r_list = self.re_func(one_regex,one_html)
        list01=[]
        list02 =[]
        j=1
        for i in r_list:
            list01.append(i[0])
            list02.append(eval(i[1]+i[2]))
            print("排行第 {} 名:".format(j),i[0],'  '+i[1]+i[2])
            j=j+1

输出结果:
排行分析
将排行前四的电影及评分用条形图展示:
代码实现:

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.xlabel('电影名称')
plt.ylabel('评分')
plt.bar(list01[0:4], list02[0:4])
plt.title('热门电影排行')               
plt.savefig('g:spider/猫眼电影/排行分析/谭——排行.png', dpi=300)
plt.show()

条形图展示:
在这里插入图片描述
二:爬取《 你好,李焕英》的评论,并用词云显示。
1.分析网页源代码:
在这里插入图片描述
正则表达式表示:

<div class="comment-content">(.*?)</div>

将获取的内容保存到txt文件中
在这里插入图片描述读取txt文件,用词云展示

def word_coud(self,s,name_list,text):  
        #功能:生成词云
        cut_text = jieba.cut(text)
        result = " ".join(cut_text)
        font = r'C:\Windows\Fonts\simfang.ttf'
        wc = WordCloud(collocations=False, 
                       font_path=font, 
                       width=800, height=800, 
                       margin=2,
                       scale=20,
                       max_words=30,               
                       background_color='white').generate(text.lower())
        
        plt.imshow(wc)
        plt.axis("off")
        plt.show()
        wc.to_file('g:spider/猫眼电影/排行分析//谭——{}.png'.format(name_list))

词云展示:
在这里插入图片描述
完整代码:

#需要安装re库,requests库,fake_useragent库,wordcloud库,jieba库,matplotlib库
#在cmd中使用pip install 相应的库
import re
import requests
import time
import random
from fake_useragent import UserAgent#代理池
import matplotlib.pyplot as plt
import jieba
from wordcloud import WordCloud

class Catfilmspidr:
    def __init__(self):
        self.paihang_url = 'https://maoyan.com/board'
        self.list_url = 'https://maoyan.com/films/1299372'
        #初始化
        pass
        
    def get_html(self,url):
        #功能:请求网页
        ip = '222.93.74.8:63325'     
        header = {'User-Agent':UserAgent().random}
        html = requests.get(url = url,proxies ={'http' : 'http://{}'.format(ip),'https':'https://{}'.format(ip)},headers = header).content.decode('utf-8')
        return html
        
    
               
    def re_func(self,regex,html):
        #功能:解析网页
        pattern = re.compile(regex,re.S)
        r_list = pattern.findall(html)
        return r_list
    
    
    def parse_html_one(self,one_url):       
        one_regex = '<dd>.*?<a href=.*? title="(.*?)" class="image-link".*?<p class="score"><i class="integer">(.*?)</i><i class="fraction">(.*?)</i>'
        one_html = self.get_html(url=one_url)
        r_list = self.re_func(one_regex,one_html)
        list01=[]
        list02 =[]
        j=1
        for i in r_list:
            list01.append(i[0])
            list02.append(eval(i[1]+i[2]))
            print("排行第 {} 名:".format(j),i[0],'  '+i[1]+i[2])
            j=j+1
            
        #功能:生成条形图
        plt.rcParams['font.sans-serif'] = ['SimHei']
        plt.rcParams['axes.unicode_minus'] = False
        plt.xlabel('电影名称')
        plt.ylabel('评分')
        plt.bar(list01[0:4], list02[0:4])
        plt.title('热门电影排行')               
        plt.savefig('g:spider/猫眼电影/排行分析/谭——排行.png', dpi=300)
        plt.show()
                       
    
    def parse_html_two(self,two_url):
        #功能:提取网页内容       
        name_regex = '<h1 class="name">(.*?)</h1>' #电影名称正则表达式       
        comment_regex ='<div class="comment-content">(.*?)</div>'#评论正则表达式
        two_html = self.get_html(url=two_url)
        name_list = self.re_func(name_regex,two_html)#获取电影名称(列表类型)        
        comment_list = self.re_func(comment_regex,two_html)#获取评论信息(列表类型)
        file_name = 'g:spider/猫眼电影/排行分析/谭——{}.txt'.format(name_list[0])        
        f = open(file_name,'w',encoding='utf-8')  #评论保存      
        print(name_list)
        for i in comment_list:                       
            f.write(i)
            f.write('\n')
        print('{}抓取成功'.format(name_list[0]))
        f.close        
        self.word_parse(file_name,name_list[0])#词频分析
           
    def word_parse(self,file_name,name_list): 
        #功能:词频分析,可以参照Python语言程序设计基础P171
        text = open(file_name, "r",encoding='utf-8').read()
        counts={}
        words = jieba.cut(text)        
        for word in words:
            if len(word)==1:
                continue
            else:
                counts[word]=counts.get(word,0)+1
        items =list(counts.items())
        items.sort(key=lambda x:x[1],reverse=True)
        s='  '
        for i in range(5):
            word,count = items[i]
            s=word+','+s    
            print('{}:{}'.format(word,count))
        print(s)
        self.word_coud(s,name_list,text) #生成词云 图片保存      
        
    def word_coud(self,s,name_list,text):  
        #功能:生成词云
        cut_text = jieba.cut(text)
        result = " ".join(cut_text)
        font = r'C:\Windows\Fonts\simfang.ttf'
        wc = WordCloud(collocations=False, 
                       font_path=font, 
                       width=800, height=800, 
                       margin=2,
                       scale=20,
                       max_words=30,               
                       background_color='white').generate(text.lower())
        
        plt.imshow(wc)
        plt.axis("off")
        plt.show()
        wc.to_file('g:spider/猫眼电影/排行分析//谭——{}.png'.format(name_list))
                                   
    
    def run_spider(self):
        self.parse_html_one(self.paihang_url)
        self.parse_html_two(self.list_url)
            
    
                
        
if __name__=='__main__':
    start_time = time.time()
    spider =Catfilmspidr()
    spider.run_spider()
    end_time =time.time()
    a=end_time - start_time
    print('执行时间为:{0:.2f}'.format(a))
               
  • 3
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
爬取猫眼电影评论,您需要了解以下步骤: 1. 访问猫眼电影网站,找到您想要爬取评论的电影页面,例如:https://maoyan.com/films/1217236 2. 打开开发者工具,选择Network标签页,刷新页面,找到评论接口链接,例如:https://m.maoyan.com/mmdb/comments/movie/1217236.json?_v_=yes&offset=0&startTime=0 3. 使用Python的requests库向评论接口发送请求,获取数据,并使用json库解析数据 4. 分析数据结构,提取评论信息,例如:评论内容、评论时间、评论用户、评论评分等 5. 将提取的评论信息存储到本地文件或数据库中 下面是一个简单的Python爬虫示例代码: ```python import requests import json url = 'https://m.maoyan.com/mmdb/comments/movie/1217236.json?_v_=yes&offset=0&startTime=0' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers) if response.status_code == 200: comments = json.loads(response.text)['cmts'] for comment in comments: content = comment['content'] time = comment['time'] nick = comment['nick'] score = comment['score'] print('评论内容:', content) print('评论时间:', time) print('评论用户:', nick) print('评论评分:', score) else: print('爬取失败') ``` 注意:该示例仅供学习参考使用,不得用于商业用途。同时,请尊重网站的使用规则和版权,遵守网络道德。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

互动创客坊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值