1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > csv文件操作和爬虫抓取豆瓣影评并生成词云图

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

时间:2021-12-29 17:08:37

相关推荐

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 写入多行内容writerowscsvWriter.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.查看页面信息的方法

进入要查看的页面,右键->检查->network->刷新,显示如下信息

查看网页链接,找到最后这部分,在network的name标签中找出相同的

单击该name,在右侧general中从Request Header中找出需要的信息

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

import requests from bs4 import BeautifulSoupimport 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=|utmccn=(referral)|utmcmd=referral|utmcct=/; __yadk_uid=pWo4BT7vwgPHXL7Bg7HkUFrerRqxQMVc; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1600305602%2C%22https%3A%2F%%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=ca7fb5b75ca8: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"," ")# 将作者、评分、评论写成列表,并且添加到reviewListreviewList.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 WordCloudimport jiebalist1 = ["my","name","is","linxu"]print(" ".join(list1)) # join函数:把list1列表以" "链接起来msg = "我喜欢看辰东写的遮天"result = jieba.cut(msg) #静态类,直接调用,cut:切割句子print(" ".join(result))

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

import csvfrom wordcloud import WordCloud import jiebafrom 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. 词云生成结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。