Python爬虫|豆瓣网友评价告诉你《你好,李焕英》为什么这么火!

Posted 爬虫与地理信息

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python爬虫|豆瓣网友评价告诉你《你好,李焕英》为什么这么火!相关的知识,希望对你有一定的参考价值。

欢迎大家关注我的微信公众号!
名称:爬虫与地理信息

一、爬虫思路分析

点击划线处进入到短评页面,鼠标右击检查进入浏览器调试页面。

通过分析,每一条短评属于一个div标签,class名为comment-item,每一页显示固定数量的短评。


点开第一个,可以发现我们要找的评价语在一个标签中。通过点击下方的翻页,可以观察到每一页的url地址规律,发现只有一个参数start在变化,说明其为页面参数。照此规律,我们依次构造每一页的访问地址。

二、核心代码

1.获取网页内容
def gethtml(url):
    user_agent = random.choice(USER_AGENTS)
    headers = 
         'User-Agent': user_agent,
         'Cookie':'你自己账号的Cookie'
    
    try:
        response = requests.get(url, headers=headers, timeout=20)
        response.raise_for_status()
        # content属性返回的类型是bytes
        #html = response.content.decode('utf-8', errors='ignore')
        # text属性类型为string
        text = response.text
        # print(text)
        return text
    except:
        print("爬取失败!")
2.解析网页内容
def parse_page(text):
 html = etree.HTML(text)
 #获取短评列表
 comments = html.xpath("//div[@class='comment']//span[@class='short']/text()")
 return comments
3.爬取信息
def spider(page_nums):
   print("爬虫开始......")
   url = "https://movie.douban.com/subject/34841067/comments?start=&limit=20&status=P&sort=new_score"
   #获取观看人数
   html = etree.HTML(getHtml(url.format(0)))
   visited_nums_str = html.xpath("//li[@class='is-active']/span/text()")
   visited_nums = visited_nums_str[0].split('(')[1].split(')')[0]
   print("观看人数:" + visited_nums)
   comment_list = []
   for i in range(1,page_nums+1):
       if len(comment_list) < int(visited_nums):
           full_url = url.format((i - 1) * 20)
           # print(full_url)
           print("爬取第 "+ str(i) +" 页")
           tag = random.randint(1,3)
           time.sleep(tag)
           text = getHtml(full_url)
           comments = parse_page(text)
           for comment in comments:
               #print(comment)
               #print("******************************")
               comment_list.append(comment)
               # comment_list.append(comment.replace("\\n", ""))
   print("爬虫结束!")
   return comment_list
4.保存短评到文本文件
def save_file(comment_list):
   print("开始写入文件......")
   with open("./你好李焕英评论.txt", 'w', encoding='utf-8') as f:
       for comment in comment_list:
           #print(film_info)
           comment_line = comment + "\\n"
           f.write(comment_line)
           #f.write("--------------------------------------------------------------------"+ "\\n")
   print("写入文件完成!")
5.分词与词云图制作
if __name__ == '__main__':
   start = time.time()
   #comment_list = spider(10)
   #save_file(comment_list)
   filename = "你好李焕英评论.txt"
   f = open(filename, mode='r', encoding='utf-8')
   comments = f.readlines()
   #保留用户自定义词语
   jieba.load_userdict('dict.txt')
   mytext = ''
   for comment in comments:
       mytext += ' '.join(jieba.cut(comment, cut_all=False))

   # 设置词云形状
   mask = np.array(Image.open("2.png"))
   wordcloud = WordCloud(
                       mask = mask,
                       width=1000, #词云图片宽度,默认400像素
                       height=800, #词云图片高度 默认200像素
                       background_color='white',  #词云图片的背景颜色,默认为黑色
                       scale= 5,  #Scale 默认值1。值越大,图像密度越大越清晰
                       font_path='./fonts/simhei.ttf', #指定字体路径 默认None,对于中文可用font_path='msyh.ttc'
                       stopwords= '还是','故事','李焕英','不是','观众','导演','电影','贾玲','没有','时候','那个','自己','确实','但是','喜剧','就是',
                          '可以','什么','我们','觉得','最后','这个','如果','已经','以为','真的','一个' #不显示的单词
                         )
   wordcloud.generate(mytext)
   wordcloud.to_file('你好李焕英影评2.jpg')

   end = time.time()
   print('程序执行时间: %.2f' % (end - start))

三、结果展示

1.短评文件

最喜欢其中的一句短评:“你以为你已经很爱很爱妈妈了,但妈妈远比你想象中更爱更爱更爱你。”

2.词云图片

①.无背景词云

②.五角星形状词云

③.汉字形状词云

以上是关于Python爬虫|豆瓣网友评价告诉你《你好,李焕英》为什么这么火!的主要内容,如果未能解决你的问题,请参考以下文章

写不好 SQL? 送你一个大招

Python从0开始写爬虫——把扒到的豆瓣数据存储到数据库

Python爬虫——豆瓣数据模型训练与检测

Python爬虫——豆瓣下图书信息

Python爬虫入门 | 4 爬取豆瓣TOP250图书信息

Python爬虫实战(1)requests爬取豆瓣电影TOP250