当前位置: 首页 > news >正文

如何用 Python采集 <豆某yin片>并作词云图分析 ?

嗨害大家好鸭!我是小熊猫~

总有那么一句银幕台词能打动人心

总有那么一幕名导名作念念不忘

不知道大家有多久没有放松一下了呢?

本次就来给大家采集一下某瓣电影并做词云分析

康康哪一部才是大家心中的经典呢?
最近又有哪一部可能会成为经典呢?

源码、素材python永久安装包:点击此处跳转文末名片获取

在这里插入图片描述

环境使用:

  • Python 3.8 解释器

  • Pycharm 编辑器

模块使用:

  • import parsel >>> pip install parsel

  • import requests >>> pip install requests

  • import csv

在这里插入图片描述

代码展示

# 导入数据请求模块 --> 第三方模块, 需要安装 pip install requests
import requests
# 导入数据解析模块 --> 第三方模块, 需要安装 pip install parsel
import parsel
# 导入csv模块 --> 内置模块, 不需要安装
import csv

安装模块:

  1. win + R 输入cmd 然后输入 安装命令 pip install requests

  2. pycharm终端里面 输入安装命令 pip install requests
    模拟浏览器: --> headers 请求头 <开发者工具进行复制>
    把python代码伪装成浏览器去发送请求
    目的: 为了防止被反爬
    反爬: 你得不到数据, 或者返回的数据不是你想要的
    如何批量替换

  3. 选中替换内容, ctrl + R

  4. 勾选上 .* 正则

  5. 输入正则匹配规则, 进行替换
    :.*

    采集的速度过快/频繁, 可能会IP异常

解决方法:

  1. 登陆账号加上cookie
  2. 用IP代理, 切换IP
    免费的IP, https 可能用不了 HTTP有一些可以的, 质量不好
    氪金的IP 一个IP 几分钱一个(感兴趣的可以翻一翻我之前的文章)
    多页的数据采集
    分析请求链接的变化规律

在这里插入图片描述

正式代码

1. 发送请求, 模拟浏览器对于url地址发送请求

# 0<起始数包含>, 201<末尾数不包含>, 20<步长>
for page in range(0, 201, 20):# 请求链接 字符串格式化方法 -->url = f'https://movie.****.com/subject/4811774/comments?start={page}&limit=20&status=P&sort=new_score'# 伪装模拟headers = {# User-Agent 用户代理, 表示浏览器基本身份信息'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'}# 发送请求response = requests.get(url=url, headers=headers)

2. 获取数据, 获取服务器返回响应数据

开发者工具: responseresponse.text --> 获取响应文本数据response --> 响应对象text --> 文本
    # 把获取下来html字符传数据<response.text>, 转换可解析的对象selector = parsel.Selector(response.text)

3. 解析数据, 提取我们想要的数据内容

影评相关数据

css选择器: 根据标签属性提取数据内容

    # 第一次提取所有内容divs = selector.css('div.comment-item')# 把列表里面元素一个一个提取出来, for循环遍历for div in divs:"""湖南 长沙.comment-info a::text --> 提取类名为comment-info标签下面a标签里面文本数据get() --> 获取第一个标签数据, 返回字符串数据类型attr() --> 获取标签里面属性"""name = div.css('.comment-info a::text').get()  # 昵称rating = div.css('.rating::attr(title)').get()  # 评分date = div.css('.comment-time ::attr(title)').get()  # 日期area = div.css('.comment-location::text').get()  # 归属地short = div.css('.short::text').get().replace('\n', '')  # 评论count = div.css('.vote-count::text').get()  # 有用# 把数据放到字典里面dit = {'昵称': name,'评分': rating,'日期': date,'归属地': area,'评论': short,'有用': count,}# 写入数据csv_writer.writerow(dit)print(name, rating, date, area, short, count)

创建文件对象

f = open('影评.csv', mode='a', encoding='utf-8-sig', newline='')
# f 文件对象 fieldnames 表头/字段名
csv_writer = csv.DictWriter(f, fieldnames=['昵称','评分','日期','归属地','评论','有用',
])# 写入表头
csv_writer.writeheader()

绘制词云图
模块导入

# 导入结巴模块 --> 第三方模块, 需要安装 pip install jieba
import jieba
# 导入pandas --> 第三方模块, 需要安装 pip install pandas
import pandas as pd
# 导入词云模块 --> 第三方模块, 需要安装 pip install wordcloud
import wordcloud

读取csv表格里面数据内容

df = pd.read_csv('影评.csv')

获取评论内容

content_list = df['评论'].to_list()
# 把列表转成字符串
content = ''.join(content_list)
# 进行分词处理
string = ' '.join(jieba.lcut(content))

词云图配置

wc = wordcloud.WordCloud(width=1000,  # 宽height=700,  # 高background_color='white',  # 背景颜色font_path='msyh.ttc', # 设置字体stopwords={'了', '的', '是', '我', '在', '和'},scale=15
)
# 传入文字内容
wc.generate(string)
# 输出词云图
wc.to_file('词云图.png')
print(string)

本篇文章就到这里啦~

我是小熊猫,咱下篇文章再见啦(✿◡‿◡)

在这里插入图片描述

👇问题解答 · 源码获取 · 技术交流 · 抱团学习请联系👇

http://www.lryc.cn/news/31050.html

相关文章:

  • Python装饰器的具体实用示例
  • 谈谈我对Retrofit源码的理解
  • 八股文(三)
  • 2023最新实施工程师面试题
  • 安卓逆向_6 --- JNI 和 NDK
  • Pod控制器
  • 微服务到云原生
  • Spring Security 实现自定义登录和认证(1):使用自定义的用户进行认证
  • Spring Cloud(微服务)学习篇(七)
  • 嵌入式安防监控项目——前期知识复习
  • SpringAOP——基础知识
  • kafka3.0安装使用
  • Centos7(阿里云)_安装Mysql8.0
  • 【Java】JVM
  • Linux 和数据库笔记-06
  • MySQL面试题-事务篇
  • Linux嵌入式开发 | 汇编驱动LED(1)
  • 什么是EventLoop?怎么测试Node或页面的性能
  • 1018 锤子剪刀布 1025 反转链表
  • 卷积神经网络的原理及实现
  • 【C++知识点】重载
  • apscheduler三种定时触发方式
  • 802.11 service服务类型
  • pytest测试框架——allure报告
  • SQLI-Labs(3)8-14关【布尔盲注和时间盲注】
  • ESP32学习笔记03-日志打印
  • mongoTemplate非string类型模糊查询
  • Redis是单线程还是多线程?Redis的10种数据类型,有哪些应用场景?
  • 到底什么才是幻读?
  • RPC重试机制和控制方案