Python爬取豆瓣短评

豆瓣短评.py

from multiprocessing import Process #多进程
import threading #多线程
from lxml import etree
import requests
import time
import random
import ciyun as cy





# //*[@id="comments"]/div[1]/div[2]/h3/span[2]/a

start=time.clock()

# print(etree.tostring(htmlelement, encoding="utf-8").decode("utf-8")

def paqu(id,startpage,endpage,save):
    j = 1
    with open("/Users/zhangpengxu/Desktop/爬取影评/paquresult/"+str(save)+".txt", 'w', encoding='utf-8') as f:
        for a in range(startpage,endpage):#爬取前两页
            for next in range(1,21):#每页20条评论
                url="https://movie.douban.com/subject/"+str(id)+"/comments?start="+str(20*a) #哪吒之魔童降世
                # htmlelement = etree.parse(url, parser=parser)
                result=requests.get(url).content   #使用content 使用text的时候经常解析不出来
                req = etree.HTML(result)  #使用xpath解析
                links1=req.xpath('//*[@id="comments"]/div['+str(next)+']/div[2]/h3/span[2]/a/text()')  #评论ID
                links2=req.xpath('//*[@id="comments"]/div['+str(next)+']/div[2]/p/span/text()') #评论内容
                links3=req.xpath('//*[@id="comments"]/div['+str(next)+']/div[2]/h3/span[2]/span[3]/text()')#评论日期
                # links4=req.xpath('//*[@id="comments"]/div['+str(next)+']/div[2]/h3/span[2]/span[2]')#评论分数
                for i in links1:
                    f.write("%s"%j+":"+"评论ID:"+i+"\n")
                for i in links2:
                    f.write("评论内容" + ":" + i + "\n")
                # for i in links4:
                #     f.write("评分" + ":" + i + "\n")
                for i in links3:
                    f.write("评论日期" + ":" + i + "\n")
                j += 1
                time.sleep(random.random())   # 产生 0 到 1 之间的随机浮点数 防止douban跟踪
    print("Pages:"+"%s"%startpage+"to"+"%s"%endpage+" 打印评论完成")
    f.close()
if __name__=="__main__":
    try:
        movieid=input('请输入影片ID(8位数字):')
        #哪吒 26794435 上海堡垒:26581837 长城:6982558 新喜剧之王:4840388
    except:
        print('输入异常')
    else:
        print('输入影评ID成功')
    print('***********开始准备获取豆瓣评论,请等待*********')
    t1 = threading.Thread(target=paqu, args=(int(movieid),0,1,106,))  #两个线程同时跑
    t2 = threading.Thread(target=paqu, args=(int(movieid),1,2,107,))
    # p1=Process(target=paqu,args=('r1',0,1,66,))
    # p2=Process(target=paqu,args=('r2',1,2,77,))
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    print('*******获取豆瓣评论完成*************')
    print('********现在开始生产词云,请等待***********')
    c1 = threading.Thread(target=cy.product,args=(106,106,500,))
    c2 = threading.Thread(target=cy.product,args=(107,107,500,))
    c1.start()
    c2.start()
    c1.join()
    c2.join()
    print('生成词云完成')

end=time.clock()
print("总耗时",end-start)

词云.py

# author:zhangpengxu

import os
import numpy as np
import jieba
from PIL import Image
from wordcloud import WordCloud,STOPWORDS



def product (dk,save,pi):   #dk为打开的TXT save为保存的词云名称 pi为生成词云图片的路径

    with open("/Users/zhangpengxu/Desktop/爬取影评/paquresult/"+str(dk)+".txt",'r',encoding='utf-8') as f:
        text = f.read().replace(' ','').replace('\n','').strip()
    text = jieba.cut(text)
    text = ''.join(text)

    #以下为wordcloud
    # 删掉关键词
    stopwords = set(STOPWORDS)
    stopwords.add('评论日期')
    stopwords.add('评论ID')
    stopwords.add('评论内容')
    stopwords.add('丁凯乐')
    douban_mask = np.array(Image.open("/Users/zhangpengxu/Desktop/爬取影评/生成词云用图片/"+str(pi)+".jpg"))
    wc = WordCloud(
        mask=douban_mask,
        stopwords=stopwords,
        font_path="/Users/zhangpengxu/Desktop/爬取影评/Kaiti.ttc",
        background_color='white',
    contour_color='steelblue'
    ).generate(text)
    wc.to_file("/Users/zhangpengxu/Desktop/爬取影评/ciyun/"+str(save)+".JPG")



测试.py

import ciyun as cy
import threading
import time


start=time.clock()
c1 = threading.Thread(target=cy.product, args=(102, 102,))
c2 = threading.Thread(target=cy.product, args=(102, 103,))
c1.start()
c2.start()
c1.join()
c2.join()
print('生成词云完成')


end=time.clock()
print("总耗时: ",end-start)

txt内容

1:评论ID:字母君
评论内容:讽刺的是,尽管角色口口声声说着“做自己”、“我命由己不由天”、“最害人的是成见”,电影却依然一直在用对肥胖、结巴、娘娘腔等各色缺陷产生的成见制造无价值,且一点都不好笑的笑料。
评论日期:
                    2019-07-14
                
2:评论ID:⎝丁凯乐⎠
评论内容:实名反对最赞说烂片的评论,这是人类无法逃脱的真香定律!
看完觉得不值票钱可以来快乐星球砍我!
评论日期:
                    2019-07-16
                
3:评论ID:嘟嘟熊之父
评论内容:卧槽居然看哭了,这才是货真价实的国漫新希望,终于不再是假大空的中国风堆砌,而开始借神话寓言塑造真正的“小人物”。背负原罪的出身,命中注定的死期,对存在的笃定和身份的动摇,竟指向《刺客聂隐娘》的内核:一个人,没有同类。完整的世界观构建,父子母子师徒兄弟友敌,每一段关系都处理的有血有肉全无敷衍。美术剪辑配乐动作设计,处处都是亮点,就连喜剧部分也绝非装疯卖傻而存在无数细节作为支撑。海边夕阳踢毽和社稷图虚幻仙境两部分堪称绝美段落,飞驰想象力和一流制作实力的结合,值得一刷再刷。严格说是四星电影,但愿意加满五星狂推鼓励!
评论日期:
                    2019-07-13
                
4:评论ID:时间之葬
评论内容:又一次高举“国产动画良心”的大旗之前,我好奇的是我们的“良心动画”为什么非得加入那些尴尬又低级的网络段子式笑料,难道非得把自己打扮成一半臃肿粗鄙一半热血激昂的割裂模样,才足以迎合主流观众的口味吗?
评论日期:
                    2019-07-14
                
5:评论ID:天马星
评论内容:年度最佳动画,不,年度最佳影片,剧作上的成熟应该让同档期的《狮子王》跪下来叫爸爸,起承转合水到渠成且饱含情感力量,这种成熟度不管是在动画这种形式里还是脱离动画都值得所有国产商业电影学习。整部影片看下来,在形式上非常现代化,包括笑点台词都贴近现代网络化的生活,是谓形散,但是影片把握住了哪吒这个神话人物的内在精神:我命由我不由天,并且自始至终都贯彻下去,是谓神不散,包括反派敖丙及申公豹都人物弧光饱满,在非我族类其心必异的人类世界里,《哪吒之魔童降世》是为所有异类书写的颂歌,这部片子就如同蔡依林在金曲奖上说的:献给那些曾经认为自己没有任何机会与选择的你,请你一定要记得选择你自己,支持你自己。
评论日期:
                    2019-07-14
   

导出词云图片

Python爬取豆瓣短评_第1张图片

你可能感兴趣的:(个人学习)