我们来看看网友们的怎么评价斗罗大陆真人版的

  • Post by eyiadmin
  • May 22, 2020
post-thumb

大叔比较喜欢看动漫,一直觉得动漫版的斗罗大陆的剧情和效果都非常不错,所以一直在看。这不,春节期间,真人版斗罗大陆上映了,我第一集没有看完就放弃了,并不是说真人版的斗罗大陆拍得不好,而是和我看的动漫版有些差距,有些无法适应,如果我没有看动漫版的斗罗大陆的话,这部剧应该会一直看下去。这部剧上映也有十多天了,大家的评价还是非常高的,今天我们就来玩一下抓取豆瓣评论。

这里,我主要是使用Python来抓取豆瓣的影评,用免费工具生成词云,下面我们就开始吧。

这里我使用的环境是Python 3.9.0,IDE是用的

Version: 1.53.2 (user setup)
Commit: 622cb03f7e070a9670c94bae1a45d78d7181fbd4
Date: 2021-02-11T11:48:04.245Z
Electron: 11.2.1
Chrome: 87.0.4280.141
Node.js: 12.18.3
V8: 8.7.220.31-electron.0
OS: Windows_NT x64 10.0.18363

接下来,我们就分析一下豆瓣影评的网页结构

我们可以通过谷歌浏览器访问https://movie.douban.com/subject/30313969/comments,同时可以获取到上图的网页结构,我们可以看到,评论全在id="comments的节点下面,所以,我们需要先这个节点下面所有的comment-item,接下来我们就编码了

开始之前,我们需要安装类库:

  • requests-html
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ requests-html

现在,我们开始编码吧

from requests_html import HTMLSession

# 请求头
ua='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4270.0 Safari/537.36'

session = HTMLSession()

url='https://movie.douban.com/subject/30313969/comments'

res = session.get(url, headers={'User-Agent': ua})

# 查找#comments > .comment-item下的内容,查找出来是一个数组
contents= res.html.find('#comments > .comment-item')

for item in contents:
    content=item.find('.comment-content')[0]
    print(content.text)

我们可以看到这里已经获取到了当前页面的评论了,那么还有很多页面,我们怎么去获取下一页的评论呢?

我们在页面中可以看到后一页,如果有后一页,那么是会有这个超链接的,当我们点击后,就会跳转到https://movie.douban.com/subject/30313969/comments?start=20&limit=20&status=P&sort=new_score去获取后一页的评论,所以,这里,我们就需要对之前的代码进行改造一下

from requests_html import HTMLSession

# 请求头
ua='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4270.0 Safari/537.36'

session = HTMLSession()

base_url='https://movie.douban.com/subject/30313969/comments'



def get_html(url):
    res = session.get(url, headers={'User-Agent': ua})

    html=res.html
    # 查找#comments > .comment-item下的内容,查找出来是一个数组
    contents= html.find('#comments > .comment-item')

    
    for item in contents:
        content=item.find('.comment-content')[0]
        print(content.text)

    # 查找下一页a标签
    next_a=html.find('#paginator > a.next')

    if len(next_a)>=1: 
        next_url=next_a[0].attrs['href']
        full_url='{0}{1}'.format(base_url,next_url)
        print(full_url)
        get_html(full_url)

get_html(base_url)

现在我们运行起来会看到,一直在获取评论

获取评论基本差不多了,既然我们要分析,那么我们肯定需要把评论存下来呀,是吧?这里,我们就直接存文本吧,下面就是我的最终代码

from requests_html import HTMLSession

# 请求头
ua='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4270.0 Safari/537.36'
cookie='ll="108310"; bid=Krylp4Gu3OE; __yadk_uid=3bGWURk6qXwS8EQQlVYn85HtWRJXDK7z; __gads=ID=9038b4a23ebb4b71-222ba55a0ec60024:T=1613528741:RT=1613528741:S=ALNI_Mavp-PGrlAtx-s-B1uNFLpphPUMNw; _vwo_uuid_v2=D258751D8CEF388657C4E401FFA58ED16|27cb81b85f453cdef36b9b33268b790b; __utmz=30149280.1613544951.2.2.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __utmc=30149280; ap_v=0,6.0; __utmz=223695111.1613544962.2.2.utmcsr=douban.com|utmccn=(referral)|utmcmd=referral|utmcct=/search; __utmc=223695111; douban-fav-remind=1; ct=y; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1613551754%2C%22https%3A%2F%2Fwww.douban.com%2Fsearch%3Fq%3D%25E6%2596%2597%25E7%25BD%2597%25E5%25A4%25A7%25E9%2599%2586%22%5D; _pk_ses.100001.4cf6=*; __utma=30149280.850053847.1613528742.1613548261.1613551754.4; __utmt=1; dbcl2="233289905:eXYMRb2nULc"; ck=Ju6D; push_noty_num=0; push_doumail_num=0; __utmv=30149280.23328; __utmb=30149280.3.10.1613551754; __utma=223695111.184997682.1613528742.1613548261.1613551817.4; __utmb=223695111.0.10.1613551817; _pk_id.100001.4cf6=c5189830feab4874.1613528741.4.1613551817.1613548261.'

session = HTMLSession()

base_url='https://movie.douban.com/subject/30313969/comments'




def get_html(url):
    res = session.get(url, headers={'User-Agent': ua,'Cookie':cookie})

    html=res.html
    # 查找#comments > .comment-item下的内容,查找出来是一个数组
    contents= html.find('#comments > .comment-item')

    content_lines=[]
    for item in contents:
        content=item.find('.comment-content')[0]
        content_lines.append(content.text)

    write_file(content_lines)
    # 查找下一页a标签
    next_a=html.find('#paginator > a.next')

    if len(next_a)>=1: 
        next_url=next_a[0].attrs['href']
        full_url='{0}{1}'.format(base_url,next_url)
        print(full_url)
        get_html(full_url)

def write_file(contents):
    with  open('content.txt','a+', encoding='utf-8') as f:
        f.writelines(contents)

get_html('{0}{1}'.format(base_url,'?status=P'))
get_html('{0}{1}'.format(base_url,'?status=N'))
get_html('{0}{1}'.format(base_url,'?status=F'))

最后我就只下载了这点评论,最后,我用图悦分别按 热词权重热词词频生成了两张图 热词词频

热词权重

其实,我们可以借助jiebawordcloud两个类库来实现分词和生成词云,但是这里为了省事,就先省略这步,后面我们就基于这两个库来自己生成词云

LATEST POST
  • Post By eyiadmin
  • Apr 18, 2021
.NET5快速接入支付宝扫码支付
  • Post By eyiadmin
  • Apr 18, 2021
uView练手开发-开发一个图片小程序
TAG
CATEGORIES