首页 > 技术文章 > 爬取豆瓣电影-长津湖短评 - Python

mafu 2021-10-21 21:47 原文

电影《长津湖》是今年电影界的神,其他的不说,我来爬些豆瓣对长津湖的短评看看,暂时不做可视化。

"""
    爬取一下豆瓣的长津湖短评,爬取短评的六个内容:
        评论人,是否看过,星级(推荐力度),时间,获赞数,评论内容
    将爬取的内容存储到csv文档中
"""

import requests
# from bs4 import BeautifulSoup
import parsel
import csv

# 首先建立csv文档
csvFile = open('长津湖豆瓣短评.csv', mode='a', encoding='utf-8-sig', newline='')

csvWriter = csv.DictWriter(csvFile, fieldnames=[
    '评论人',
    '是否看过',
    '推荐力度',
    '评论时间',
    '获赞数量',
    '评论内容',
])
# 先写头
csvWriter.writeheader() #写入表头

# 接下来是爬取数据
# 先建立header
headers = {

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36',
}


# url规律,变化在start=的数字
# url = f'https://movie.douban.com/subject/25845392/comments?start={page}&limit=20&status=P&sort=new_score'

# 开始请求网页
for page in range(0, 120, 20): # 我这里就爬六页
    url = f'https://movie.douban.com/subject/25845392/comments?start={page}&limit=20&status=P&sort=new_score'
    response = requests.get(url, headers=headers) # 通过开发者工具,发现请求是get的,我这里就用get的
    response.encoding = response.apparent_encoding
    response.raise_for_status()
    response.encoding = 'utf-8'
    selector = parsel.Selector(response.text)

    allData = selector.css('#comments div.comment-item')
    for item in allData:
        user = item.css('.comment-info a::text').get() # 获取评论人的名称
        islook = item.css('.comment-info span::text').get() # 是否看过
        # islook = item.css('.comment-info span:nth-child(2)::text').get() # 是否看过
        isrecommended = item.css('.comment-info span::attr(title)').get() # 推荐力度
        # isrecommended = item.css('.comment-info span:nth-child(3)::attr(title)').get()  # 推荐力度
        ratetime = item.css('.comment-info span:nth-child(4)::attr(title)').get().strip() # 评论时间
        # followers = item.css('.comment-vote span::text').get() # 点赞数量
        followers = item.css('.comment-vote span::text').get() # 点赞数量
        print(followers)
        # content = item.css('.comment-content .short::text').get() # 评论内容
        content = item.css('.comment-content span::text').get()

        csvwriterdict = {
            '评论人': user,
            '是否看过': islook,
            '推荐力度': isrecommended,
            '评论时间': ratetime,
            '获赞数量': followers,
            '评论内容': content,
        }
        print(csvwriterdict)
        # 将上面的字典写入到csv文档
        csvWriter.writerow(csvwriterdict)

csvFile.close() # 关闭文件

  

本来想用bs4爬的,看到某大神用parsel进行数据解析,学习下。存储的效果如下:

 

留几个问题,作为自己的动力。

1,用bs4或者selenium重新爬一次上面的项目;

2,做些可视化;

3,利用pandas的格式进行保存。

懒了,有空再做这几个。 

推荐阅读