csv文件操作和爬虫抓取豆瓣影评并生成词云图

1. csv文件操作

csv文件windows默认是excel打开的,是一种表格式文件

import csv #导入csv的库
# 一次写入多行文本时,会多换一行,可以设置newline=""来解决
with open("喜喜.csv", "w",newline="",encoding="utf-8") as file:
    # writer: 获取csv的写编辑对象
    csvWriter = csv.writer(file)
    info = [     # 定义一个二维列表作为表格内容
        ["英雄", "技能", "装备", "年龄"],
        ["后羿", "射日", "弓", "12"],
    ]
    # 写入一行内容用writerow    写入多行内容writerows
    csvWriter.writerows(info) #把info作为多行内容写入excel
    # 用记事本打开,然后另存为,使用带BOM的UTF-8保存,然后再用excel打开,便不会有乱码了
with open("喜喜.csv", "r", encoding="utf-8") as file2:
    csvReader = csv.reader(file2) #reader: 获取csv文件的内容以二维列表的形式返回
    for reader in csvReader:
        print(reader)

2.查看页面信息的方法

  1. 进入要查看的页面,右键->检查->network->刷新,显示如下信息
    在这里插入图片描述

  2. 查看网页链接,找到最后这部分,在network的name标签中找出相同的在这里插入图片描述

  3. 单击该name,在右侧general中从Request Header中找出需要的信息在这里插入图片描述
    在这里插入图片描述

3. 爬虫抓取豆瓣影评并写入csv文件

import requests 
from bs4 import BeautifulSoup
import csv  
# 自定义一个抓取每页影评的方法
def getCommentByPage(url):
    # response = requests.get(url)
    # print(response.status_code)  # 瓣做了反爬虫处理,会返回错误代码418
    # 程序模拟浏览器向服务器发请求(浏览器发请求时会带有一些请求信息,而python脚本没用)
    # 1. 设置请求头(伪装浏览器)
    #因为豆瓣做了反爬虫处理。一般需要的信息包括浏览器信息和用户信息
    # 格式应该为:变量名={"标签1":"内容","标签2","内容"}  如果标签中含有双引号,就换成单引号
    header = {  
    	#浏览器信息
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36",
        # 用户信息
        'Cookie': 'll="118104"; bid=lcfxfqam0UI; __utmz=30149280.1600249245.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; gr_user_id=84e4d664-c0db-4b2f-9063-5db2220d00b9; _vwo_uuid_v2=D5A4EEC3511DE982EE357AC0DEFCBDD68|a2199e2a903fdca1c047a02bf8ff8a91; viewed="34710120"; __utmz=223695111.1600249273.1.1.utmcsr=douban.com|utmccn=(referral)|utmcmd=referral|utmcct=/; __yadk_uid=pWo4BT7vwgPHXL7Bg7HkUFrerRqxQMVc; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1600305602%2C%22https%3A%2F%2Fwww.douban.com%2F%22%5D; _pk_ses.100001.4cf6=*; ap_v=0,6.0; __utma=30149280.132873610.1600249245.1600249245.1600305602.2; __utmc=30149280; __utma=223695111.407950405.1600249273.1600249273.1600305602.2; __utmc=223695111; __utmt=1; ct=y; __utmt=1; __utmb=30149280.1.10.1600305602; __gads=ID=2019ca7fb5b75ca8:T=1600249841:S=ALNI_MazhI6AdCCbmBvG3dw7KIZ7zE6hAg; __utmb=223695111.10.10.1600305602; _pk_id.100001.4cf6=0741429674f84c3c.1600249273.2.1600305674.1600250207.'

            }
        # 携带请求头发请求
    response = requests.get(url, headers=header) #带请求信息的函数
    if (response.status_code != 200):
        print("访问失败")
    else:
        bs = BeautifulSoup(response.content, "html5lib") #使用靓汤结合 html5lib 结合解析获取到的网页内容
        reviewItemList = bs.find_all("div", attrs={"class": "review-item"}) # 使用bs查找所有标签div  1.div标签 2. class=“review-item”

        for reviewItem in reviewItemList:
            # 找作者
            author = reviewItem.find("a", attrs={"class": "name"}).text
            # 找评分
            rating = reviewItem.find("span", attrs={"class": "main-title-rating"})
            if (rating != None):
                star = rating.get("title")
                content = reviewItem.find("div", attrs={"class": "short-content"}).text.replace("\n"," ")
                # 将作者、评分、评论写成列表,并且添加到reviewList
                reviewList.append([author, star, content])
def writeReview():
    with open("最受欢迎影评.csv","w",newline="",encoding="utf-8") as fileW:
        scvW = csv.writer(fileW)
        scvW.writerows(reviewList)
# main方法:程序运行的入口

if __name__ == '__main__':
    # 存储影评
    reviewList = []  # 在main方法中定义的变量是全局变量
    for i in range(10):
        baseUrl = "https://movie.douban." \
                  "com/review/best/?start={}".format(i*20)
        getCommentByPage(baseUrl)
    # 将短评写入csv文件
    writeReview()

4. 结巴分词和词云库

同样是在cmd界面下载

# pip install jieba  结巴分词:将句子切割为词语
# pip install WordCloud 词云库
# 结巴分词:将句子拆分成词语
# 结巴分词的示例:
from wordcloud import WordCloud
import jieba
list1 = ["my","name","is","linxu"]
print(" ".join(list1))   # join函数:把list1列表以" "链接起来
msg = "我喜欢看辰东写的遮天"
result = jieba.cut(msg)  #静态类,直接调用,cut:切割句子
print(" ".join(result))

5. 将例3的csv影评生成词云

import csv
from wordcloud import WordCloud 
import jieba
from PIL import Image  # 安装词云的时候一起装上的
import numpy    # 安装词云的时候一起装上的

# 读取影评,返回影评列表
def readComment():
    with open("最受欢迎影评.csv",'r',encoding="utf-8") as file:
        csvRead = csv.reader(file) #加载文件数据        
        return [item[2] for item in csvRead] #这是一个列表生成式
        #生成的item应该是一个二维列表。item[2]则表示item的第二列元素
        #返回值是一个列表,列表元素是影评的内容
# 生成词云图
def generateWordCloud():
    commentlist = readComment() #获取影评内容
    finalComment = ""
    for comment in commentlist:
        finalComment+=comment  #把所有影评拼接成一个字符串
    # 读取轮廓图片,并且处理为ndarray的格式(numpy)
    image = numpy.array(Image.open('1.jpg'))  # 1.jpg 必须是一个白底图片,且图片内容不能有白色
    # 使用了image属性,词云会生成为所选用图片轮廓的形状
    # 词云的属性
    wordCloud = WordCloud(
        width = 800,  #词云的高度
        height = 400, #词云的宽度
        font_path = "STLITI.TTF", # 字体路径  在C:\Windows\Fonts目录下找一个中文样式的字体复制到工作目录
        background_color = "yellow", # 背景颜色 
        mask = image  # 图片的轮廓 #可选属性,不选择默认是矩形词云
    ).generate(" ".join(jieba.cut(finalComment)))  #jieba.cut(finalComment)) :把影评的字符串切割成词语  generate:把词语组成词云
    # 生成词云文件
    wordCloud.to_file("受欢迎.png")
if __name__ == '__main__':
    generateWordCloud()

6. 词云生成结果

在这里插入图片描述

  • 8
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,你可以使用 pandas 库的 read_csv() 方法读取 csv 文件,然后使用 DataFrame 的 indexing 操作来提取某一列,最后使用 to_csv() 方法将该列数据写入到一个新的 csv 文件中。以下是一个示例代码: ```python import pandas as pd # 读取 csv 文件 df = pd.read_csv('data.csv') # 提取某一列数据 column_data = df['column_name'] # 将数据写入新的 csv 文件 column_data.to_csv('column_data.csv', index=False, header=False) ``` 其中,'data.csv' 是原始 csv 文件的路径,'column_name' 是要提取的列的名称,'column_data.csv' 是输出文件的路径。参数 index=False 和 header=False 分别表示不写入行索引和列标题到输出文件中。 接下来,你可以使用第三方库如 jieba 和 wordcloud 来进行词云分析。具体步骤如下: ```python import jieba from wordcloud import WordCloud # 读取文本数据 with open('column_data.csv', 'r', encoding='utf-8') as f: text = f.read() # 分词 words = jieba.cut(text) # 统计词频 word_freq = {} for word in words: if len(word) > 1: word_freq[word] = word_freq.get(word, 0) + 1 # 生成词云 wc = WordCloud(background_color='white', font_path='msyh.ttc') wc.generate_from_frequencies(word_freq) # 显示词云图 import matplotlib.pyplot as plt plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.show() ``` 其中,'column_data.csv' 是上一步生成csv 文件的路径,'msyh.ttc' 是字体文件的路径,需要根据系统的实际情况进行修改。最后,调用 imshow() 方法和 show() 方法可以显示生成词云图

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值