Python采集豆某影片并作詞云圖分析

前言

嗨嘍~大家好呀,這里是魔王吶 ? ~!

image

環(huán)境使用:

  • Python 3.8 解釋器

  • Pycharm 編輯器

模塊使用:

  • import parsel >>> pip install parsel

  • import requests >>> pip install requests

  • import csv

爬蟲基本思路:

一. 數(shù)據(jù)來源分析:

  1. 明確需求

    • 明確采集的網(wǎng)站是什么?

    • 明確采集的數(shù)據(jù)是什么?

      影評(píng)相關(guān)數(shù)據(jù)內(nèi)容: 昵稱/時(shí)間/內(nèi)容/歸屬地...

  2. 抓包分析

    通過開發(fā)者工具進(jìn)行抓包分析

    • 打開開發(fā)者工具: 在網(wǎng)頁(yè)上面 F12 / 鼠標(biāo)右鍵點(diǎn)擊檢查選擇network

    • 刷新網(wǎng)頁(yè): 讓網(wǎng)頁(yè)數(shù)據(jù)重新加載一遍

    • 通過關(guān)鍵字搜索數(shù)據(jù)來源: 關(guān)鍵字<要獲取的數(shù)據(jù)>

二. 代碼實(shí)現(xiàn)步驟:

  1. 發(fā)送請(qǐng)求, 模擬瀏覽器對(duì)于url地址發(fā)送請(qǐng)求

  2. 獲取數(shù)據(jù), 獲取服務(wù)器返回響應(yīng)數(shù)據(jù)

    開發(fā)者工具: response

  3. 解析數(shù)據(jù), 提取我們想要的數(shù)據(jù)內(nèi)容\

    影評(píng)相關(guān)數(shù)據(jù)

  4. 保存數(shù)據(jù), 把數(shù)據(jù)內(nèi)容保存csv表格文件里面

代碼展示

# 導(dǎo)入數(shù)據(jù)請(qǐng)求模塊 --> 第三方模塊, 需要安裝 pip install requests
import requests
# 導(dǎo)入數(shù)據(jù)解析模塊 --> 第三方模塊, 需要安裝 pip install parsel
import parsel
# 導(dǎo)入csv模塊 --> 內(nèi)置模塊, 不需要安裝
import csv

"""

  • 安裝模塊:
    1. win + R 輸入cmd 然后輸入 安裝命令 pip install requests
    2. 在pycharm終端里面 輸入安裝命令 pip install requests
  • 模擬瀏覽器: --> headers 請(qǐng)求頭 <開發(fā)者工具進(jìn)行復(fù)制>
    把python代碼偽裝成瀏覽器去發(fā)送請(qǐng)求
    目的: 為了防止被反爬
    反爬: 你得不到數(shù)據(jù), 或者返回的數(shù)據(jù)不是你想要的
  • 如何批量替換
    1. 選中替換內(nèi)容, ctrl + R
    2. 勾選上 .* 正則
    3. 輸入正則匹配規(guī)則, 進(jìn)行替換
    :.*
    ,
  • 采集的速度過快/頻繁, 可能會(huì)IP異常
    解決方法:
    1. 登陸賬號(hào)加上cookie
    2. 用IP代理, 切換IP
    免費(fèi)的IP, https 可能用不了 HTTP有一些可以的, 質(zhì)量不好
    氪金的IP 一個(gè)IP 幾分錢一個(gè)
    • 多頁(yè)的數(shù)據(jù)采集
      分析請(qǐng)求鏈接的變化規(guī)律

你要從事pachong崗位, 這方面工作: <采集的數(shù)據(jù)量比較大>
天天和反爬打交道了JS逆向,加密 反爬IP被封,賬號(hào)被封

"""

  1. 發(fā)送請(qǐng)求, 模擬瀏覽器對(duì)于url地址發(fā)送請(qǐng)求
# 0<起始數(shù)包含>, 201<末尾數(shù)不包含>, 20<步長(zhǎng)>
for page in range(0, 201, 20):
    # 請(qǐng)求鏈接 字符串格式化方法 -->
    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'
    }
    # 發(fā)送請(qǐng)求
    response = requests.get(url=url, headers=headers)

"""

  1. 獲取數(shù)據(jù), 獲取服務(wù)器返回響應(yīng)數(shù)據(jù)

    開發(fā)者工具: response

    response.text --> 獲取響應(yīng)文本數(shù)據(jù)

    response --> 響應(yīng)對(duì)象

    text --> 文本

"""

    # 把獲取下來html字符傳數(shù)據(jù)<response.text>, 轉(zhuǎn)換可解析的對(duì)象
    selector = parsel.Selector(response.text)

"""

  1. 解析數(shù)據(jù), 提取我們想要的數(shù)據(jù)內(nèi)容

    影評(píng)相關(guān)數(shù)據(jù)

    css選擇器: 根據(jù)標(biāo)簽屬性提取數(shù)據(jù)內(nèi)容

"""

    # 第一次提取所有內(nèi)容
    divs = selector.css('div.comment-item')
    # 把列表里面元素一個(gè)一個(gè)提取出來, for循環(huán)遍歷
    for div in divs:
        """
        湖南 長(zhǎng)沙
        .comment-info a::text --> 提取類名為comment-info標(biāo)簽下面a標(biāo)簽里面文本數(shù)據(jù)
        get() --> 獲取第一個(gè)標(biāo)簽數(shù)據(jù), 返回字符串?dāng)?shù)據(jù)類型
        attr() --> 獲取標(biāo)簽里面屬性
        """
        name = div.css('.comment-info a::text').get()  # 昵稱
        rating = div.css('.rating::attr(title)').get()  # 評(píng)分
        date = div.css('.comment-time ::attr(title)').get()  # 日期
        area = div.css('.comment-location::text').get()  # 歸屬地
        short = div.css('.short::text').get().replace('\n', '')  # 評(píng)論
        count = div.css('.vote-count::text').get()  # 有用
        # 把數(shù)據(jù)放到字典里面
        dit = {
            '昵稱': name,
            '評(píng)分': rating,
            '日期': date,
            '歸屬地': area,
            '評(píng)論': short,
            '有用': count,
        }
        # 寫入數(shù)據(jù)
        csv_writer.writerow(dit)
        print(name, rating, date, area, short, count)

創(chuàng)建文件對(duì)象

f = open('影評(píng).csv', mode='a', encoding='utf-8-sig', newline='')
# f 文件對(duì)象 fieldnames 表頭/字段名
csv_writer = csv.DictWriter(f, fieldnames=[
    '昵稱',
    '評(píng)分',
    '日期',
    '歸屬地',
    '評(píng)論',
    '有用',
])

# 寫入表頭
csv_writer.writeheader()

繪制詞云圖

模塊導(dǎo)入

# 導(dǎo)入結(jié)巴模塊 --> 第三方模塊, 需要安裝 pip install jieba
import jieba
# 導(dǎo)入pandas --> 第三方模塊, 需要安裝 pip install pandas
import pandas as pd
# 導(dǎo)入詞云模塊 --> 第三方模塊, 需要安裝 pip install wordcloud
import wordcloud

讀取csv表格里面數(shù)據(jù)內(nèi)容

df = pd.read_csv('影評(píng).csv')

獲取評(píng)論內(nèi)容

content_list = df['評(píng)論'].to_list()
# 把列表轉(zhuǎn)成字符串
content = ''.join(content_list)
# 進(jìn)行分詞處理
string = ' '.join(jieba.lcut(content))

詞云圖配置

wc = wordcloud.WordCloud(
    width=1000,  # 寬
    height=700,  # 高
    background_color='white',  # 背景顏色
    font_path='msyh.ttc', # 設(shè)置字體
    stopwords={'了', '的', '是', '我', '在', '和'},
    scale=15
)
# 傳入文字內(nèi)容
wc.generate(string)
# 輸出詞云圖
wc.to_file('詞云圖.png')
print(string)

尾語 ??

要成功,先發(fā)瘋,下定決心往前沖!

學(xué)習(xí)是需要長(zhǎng)期堅(jiān)持的,一步一個(gè)腳印地走向未來!

未來的你一定會(huì)感謝今天學(xué)習(xí)的你。

—— 心靈雞湯

本文章到這里就結(jié)束啦~感興趣的小伙伴可以復(fù)制代碼去試試哦 ??

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容