Python vous aide à analyser les données de la revue Douban de « Tout ou rien » et vous indique si cela vaut la peine d'être regardé !

Préface

Utilisation environnementale

  • Interpréteur Python 3.8
  • Éditeur PyCharm

modules requis

import parsel >>> pip install parsel
import requests >>> pip install requests
import csv

1. Analyse de la source de données :
1. Exigences claires :

Quel est le site Web collecté ?

https://movie.douban.com/subject/35267208/comments?limit=20&status=P&sort=new_score
  • Quelles données sont collectées ?
    Examiner les données pertinentes

    2. Sources de données liées à la capture et à l'analyse des paquets :
    capturez et analysez les paquets via les propres outils de développement du navigateur <Points clés>

  • Ouvrez les outils de développement : F12 ou faites un clic droit et cochez pour sélectionner le réseau

  • Actualiser la page Web : laissez le contenu des données de cette page Web être rechargé

  • Recherche par mot-clé : utilisez le mot-clé <données requises> pour rechercher le paquet de données correspondant.

https://movie.douban.com/subject/35267208/comments?limit=20&status=P&sort=new_score

Insérer la description de l'image ici
2. Étapes de mise en œuvre du code : quatre étapes de base --> envoyer une demande, obtenir des données, analyser les données, enregistrer des données

  1. Envoyer une requête, simuler le navigateur envoyant une requête à l'adresse URL
https://movie.douban.com/subject/35267208/comments?limit=20&status=P&sort=new_score
  1. Obtenir des données, obtenir les données de réponse renvoyées par le serveur
    Outils de développement --> réponse

  2. Analyser les données, extraire le contenu des données souhaité
    et commenter les données pertinentes

  3. Enregistrez les données et enregistrez le contenu des données dans le fichier de table

Acquisition de données de commentaires

Envoyer une requête, simuler le navigateur envoyant une requête à l'adresse URL

Renvoyer <Response [200]> signifie que la demande est réussie

# 请求链接
url = f'https://movie.douban.com/subject/35267224/comments?start=20&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)
print(response)

Insérer la description de l'image ici

Données analytiques

Méthode d'analyse :

  • Regular re -> Analyser directement les données de chaîne
  • sélecteur CSS -> extraire les données en fonction des attributs de la balise
  • extraction de nœud XPath -> extraire les données en fonction des nœuds d'étiquette

Convertissez les données de chaîne HTML obtenues <response.text> en un objet analysable

Extraire des données spécifiques content.comment
-info a --> Localiser la balise a a::text sous le nom de la classe comment-info --> Extraire le texte dans la balise a
get() --> Obtenir la première balise content
attr( ) --> Extraire les attributs

selector = parsel.Selector(response.text) 
# 第一次提取, 所有div标签
divs = selector.css('div.comment-item')
# for循环遍历, 把列表里面元素一个一个提取出来
for div in divs:
    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()  # 地区
    votes = div.css('.votes::text').get()  # 有用
    short = div.css('.short::text').get().replace('\n', '')  # 评论
    # 数据存字典里面
    dit = {
    
    
        '昵称': name,
        '推荐': rating,
        '时间': date,
        '地区': area,
        '有用': votes,
        '评论': short,
    }
    # 写入数据
    print(name, rating, date, area, votes, short)

Insérer la description de l'image ici
enregistrer des données

data.csv -> Mode nom de fichier
= a -> Méthode d'enregistrement avec encodage
= 'utf-8' -> Format d'encodage
nouvelle ligne -> Caractère de nouvelle ligne
f -> Objet fichier

f = open('data10.csv', mode='a', encoding='utf-8-sig', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '昵称',
    '推荐',
    '时间',
    '地区',
    '有用',
    '评论',
])
# 写入表头
csv_writer.writeheader()

Analyser les données des avis

Module d'importation

import pandas as pd
import jieba
import wordcloud

Lire des données

df = pd.read_csv('data10.csv')
df.head()


Répartition recommandée

import pyecharts.options as opts
from pyecharts.charts import Pie

data_pair = [list(z) for z in zip(evaluate_type, evaluate_num)]
data_pair.sort(key=lambda x: x[1])

c = (
    Pie(init_opts=opts.InitOpts(bg_color="#2c343c"))
    .add(
        series_name="豆瓣影评",
        data_pair=data_pair,
        rosetype="radius",
        radius="55%",
        center=["50%", "50%"],
        label_opts=opts.LabelOpts(is_show=False, position="center"),
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="推荐分布",
            pos_left="center",
            pos_top="20",
            title_textstyle_opts=opts.TextStyleOpts(color="#fff"),
        ),
        legend_opts=opts.LegendOpts(is_show=False),
    )
    .set_series_opts(
        tooltip_opts=opts.TooltipOpts(
            trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"
        ),
        label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 0.3)"),
    )
)
c.render_notebook()

Insérer la description de l'image ici
Distribution locale

import pyecharts.options as opts
from pyecharts.charts import Pie

data_pair = [list(z) for z in zip(area_type, area_num)]
data_pair.sort(key=lambda x: x[1])

d = (
    Pie(init_opts=opts.InitOpts(bg_color="#2c343c"))
    .add(
        series_name="豆瓣影评",
        data_pair=data_pair,
        rosetype="radius",
        radius="55%",
        center=["50%", "50%"],
        label_opts=opts.LabelOpts(is_show=False, position="center"),
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="地区分布",
            pos_left="center",
            pos_top="20",
            title_textstyle_opts=opts.TextStyleOpts(color="#fff"),
        ),
        legend_opts=opts.LegendOpts(is_show=False),
    )
    .set_series_opts(
        tooltip_opts=opts.TooltipOpts(
            trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"
        ),
        label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 0.3)"),
    )
)
d.render_notebook()

Insérer la description de l'image ici

【2023|Enseignement du système de paiement VIP】Osez le téléchargement ! 80 épisodes de cours payants

Je suppose que tu aimes

Origine blog.csdn.net/XM67_/article/details/132339229
conseillé
Classement