鱼C论坛

 找回密码
 立即注册

[已解决]简单的登录界

[复制链接]
发表于 2024-5-28 19:29:32 | 显示全部楼层
豪在这学python 发表于 2024-05-28 19:29
country 在数据库中的类型为cachar,你给出的结果似乎 ...


如果查询的`country`列在数据库中的类型为`char`,并且包含非ASCII字符(比如中文),在绘制柱状图时可能会出现乱码问题。为了解决乱码问题,你可以使用`fontproperties`参数来设置字体。下面是一个示例代码:

  1. import matplotlib.pyplot as plt
  2. import mysql.connector
  3. from matplotlib.font_manager import FontProperties

  4. # 连接到 MySQL 数据库
  5. db = mysql.connector.connect(
  6.     host="localhost",
  7.     user="root",
  8.     password="123456",
  9.     database="dataTable"
  10. )

  11. # 创建游标对象
  12. cursor = db.cursor()

  13. # 执行 SQL 查询语句
  14. sql = "SELECT country FROM data"
  15. cursor.execute(sql)

  16. # 获取查询结果
  17. result = cursor.fetchall()

  18. # 提取结果中的country数据
  19. countries = [row[0] for row in result]

  20. # 关闭游标和数据库连接
  21. cursor.close()
  22. db.close()

  23. # 设置字体
  24. font = FontProperties(fname="SimHei.ttf", size=12)

  25. # 绘制柱状图
  26. plt.bar(range(len(countries)), countries)
  27. plt.xticks(range(len(countries)), countries, fontproperties=font)
  28. plt.show()
复制代码


在这个示例代码中,我们使用`SimHei.ttf`字体文件来指定中文字体,确保能正确显示中文字符。你可以根据实际情况修改字体文件路径和其他相关设置。注意,在运行代码前需要将字体文件放到相应路径下。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-28 19:32:32 | 显示全部楼层
FishC 发表于 2024-5-28 19:29
如果查询的`country`列在数据库中的类型为`char`,并且包含非ASCII字符(比如中文),在绘制柱状图时可 ...

运行出错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-28 19:33:07 | 显示全部楼层


对不起,我之前的回答可能有误导。实际上,在绘制柱状图时使用`matplotlib`库,不需要直接从数据库中获取数据来构建横坐标。

通常情况下,你可以将查询结果中的`country`作为纵坐标的值,然后在横坐标上使用数字索引来表示不同的柱子。

以下是一个修正的示例代码:
  1. import mysql.connector
  2. import matplotlib.pyplot as plt

  3. # 连接到 MySQL 数据库
  4. db = mysql.connector.connect(
  5.     host="localhost",
  6.     user="root",
  7.     password="123456",
  8.     database="dataTable"
  9. )

  10. # 创建游标对象
  11. cursor = db.cursor()

  12. # 执行 SQL 查询语句
  13. sql = "SELECT country FROM data"
  14. cursor.execute(sql)

  15. # 获取查询结果
  16. result = cursor.fetchall()

  17. # 关闭游标和数据库连接
  18. cursor.close()
  19. db.close()

  20. # 处理查询结果
  21. countries = [row[0] for row in result]
  22. x = range(len(countries))

  23. # 绘制柱状图
  24. plt.bar(x, countries)
  25. plt.xticks(x, countries)
  26. plt.xlabel('Country')
  27. plt.ylabel('Value')
  28. plt.title('Bar Chart')

  29. # 显示图表
  30. plt.show()
复制代码

请确保你的系统已正确安装`mysql-connector-python`和`matplotlib`库,你可以使用`pip`命令进行安装:
  1. pip install mysql-connector-python matplotlib
复制代码

此外,还需要根据你的实际情况修改数据库连接的相关参数。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-28 19:33:34 | 显示全部楼层
小肥狼haoran 发表于 2024-5-28 19:06
有种让AI帮你写作业的感觉

因为很多东西涉及盲区,只能让他来帮我完成了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-28 19:33:41 | 显示全部楼层
豪在这学python 发表于 2024-05-28 19:33
因为很多东西涉及盲区,只能让他来帮我完成了{:5_100: ...


没问题,我可以帮你完成。请提供数据库中的表结构和需要绘制柱状图的字段名字。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-28 19:37:47 | 显示全部楼层
FishC 发表于 2024-5-28 19:33
对不起,我之前的回答可能有误导。实际上,在绘制柱状图时使用`matplotlib`库,不需要直接从数据库中获 ...

图表中出现中文的地方都出现了乱码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-28 19:38:16 | 显示全部楼层
豪在这学python 发表于 2024-05-28 19:37
图表中出现中文的地方都出现了乱码


出现中文乱码的问题通常是因为字体不兼容导致的。为了在图表中正确显示中文字符,你可以使用以下方法:

1. 确保你的电脑中已经安装了支持中文的字体,比如微软雅黑(Microsoft YaHei)、宋体(SimSun)等。

2. 在绘制图表之前,设置Matplotlib库的字体为中文字体。例如,可以使用如下代码:

  
  1. import matplotlib.pyplot as plt
  2.    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 指定字体为微软雅黑
复制代码


   将上述代码放在绘制柱状图之前,将默认字体设置为中文字体。

如果以上方法仍然无法解决乱码问题,可以尝试其他字体配置或者指定英文标签代替中文标签。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-28 19:38:42 | 显示全部楼层
豪在这学python 发表于 2024-5-28 19:37
图表中出现中文的地方都出现了乱码

并且这里的图标我希望是更加高级、美观的可视化图表
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-28 19:39:17 | 显示全部楼层
豪在这学python 发表于 2024-05-28 19:38
并且这里的图标我希望是更加高级、美观的可视化图表


如果你希望使用更高级、美观的可视化图表,可以考虑使用一些专门的数据可视化库,如Seaborn、Plotly或Bokeh。这些库提供了丰富的可视化选项和交互功能,可以创建各种类型的高级图表。

以下是一个使用Plotly库绘制美观的柱状图的示例代码:

  1. import plotly.express as px
  2. import mysql.connector

  3. # 连接到 MySQL 数据库
  4. db = mysql.connector.connect(
  5.     host="localhost",
  6.     user="root",
  7.     password="123456",
  8.     database="dataTable"
  9. )

  10. # 创建游标对象
  11. cursor = db.cursor()

  12. # 执行 SQL 查询语句
  13. sql = "SELECT country, population FROM data"
  14. cursor.execute(sql)

  15. # 获取查询结果
  16. result = cursor.fetchall()

  17. # 提取数据
  18. countries = [row[0] for row in result]
  19. population = [row[1] for row in result]

  20. # 使用Plotly绘制柱状图
  21. fig = px.bar(x=countries, y=population, labels={'x':'Country', 'y':'Population'})
  22. fig.show()

  23. # 关闭游标和数据库连接
  24. cursor.close()
  25. db.close()
复制代码


注意:运行此代码之前,请确保已安装`plotly`库(使用`pip install plotly`进行安装)。此代码将根据数据库中的`country`和`population`字段绘制柱状图,并使用Plotly展示。你可以根据需要进一步自定义图表样式和动态交互。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-29 09:03:13 | 显示全部楼层
FishC 发表于 2024-5-28 19:39
如果你希望使用更高级、美观的可视化图表,可以考虑使用一些专门的数据可视化库,如Seaborn、Plotly或B ...

"""数据获取,获取歌单详情页的信息"""
from bs4 import BeautifulSoup
import pandas as pd
import requests
import time


def get_data_of_music_list_detail_page():
    """获取歌单详情页的信息"""
    df = pd.read_csv('music_data/new/music_list.csv', header=None, on_bad_lines=None, names=['url', 'title', 'play',
                                                                                             'user'])

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (HTML, like Gecko) '
                      'Chrome/63.0.3239.132 Safari/537.36 '
    }

    print("正在获取歌单详情页的信息...")

    # 输出进度条
    t = 60
    start = time.perf_counter()

    for i in range(t + 1):
        finsh = "▓" * i
        need_do = "-" * (t - i)
        progress = (i / t) * 100
        dur = time.perf_counter() - start

        print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(progress, finsh, need_do, dur), end="")

        time.sleep(0.02)

    for i in df['url']:
        time.sleep(2)

        url = 'https://music.163.com' + i
        response = requests.get(url=url, headers=headers)
        html = response.text
        soup = BeautifulSoup(html, 'html.parser')

        # 获取歌单标题
        title = soup.select('h2')[0].get_text().replace(',', ',')

        # 获取标签
        tags = []
        tags_message = soup.select('.u-tag i')

        for p in tags_message:
            tags.append(p.get_text())

        # 对标签进行格式化
        if len(tags) > 1:
            tag = '-'.join(tags)
        else:
            tag = tags[0]

        # 获取歌单介绍
        if soup.select('#album-desc-more'):
            text = soup.select('#album-desc-more')[0].get_text().replace('\n', '').replace(',', ',')
        else:
            text = '无'

        # 获取歌单收藏量
        collection = soup.select('#content-operation i')[1].get_text().replace('(', '').replace(')', '')

        # 歌单播放量
        play = soup.select('.s-fc6')[0].get_text()

        # 歌单内歌曲数
        songs = soup.select('#playlist-track-count')[0].get_text()

        # 歌单评论数
        comments = soup.select('#cnt_comment_count')[0].get_text()

        # 输出歌单详情页信息
        print('\r', title, tag, text, collection, play, songs, comments, end='', flush=True)

        # 将详情页信息写入CSV文件中
        with open('music_data/new/music_detail.csv', 'a+', encoding='utf-8-sig') as f:
            f.write(title + ',' + tag + ',' + text + ',' + collection + ',' + play + ',' + songs + ',' + comments +
                    '\n')

        # 获取歌单内歌曲名称
        li = soup.select('.f-hide li a')

        for j in li:
            with open('music_data/new/music_name.csv', 'a+', encoding='utf-8-sig') as f:
                f.write(j.get_text() + '\n')

    print("\n已获取歌单详情页的信息,保存至 music_data/music_name.csv")

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-29 09:03:24 | 显示全部楼层
豪在这学python 发表于 2024-05-29 09:03
"""数据获取,获取歌单详情页的信息"""
from bs4 imp ...


这段代码是一个用于从网易云音乐获取歌单详情页信息的Python函数。它使用了`requests`库发送HTTP请求,使用`BeautifulSoup`进行HTML解析,以获取具体的音乐信息。

如果你想要将获取到的歌单详情页信息可视化成更高级、美观的图表,可以考虑使用数据可视化库,如`matplotlib`、`seaborn`、`plotly`等。这些库提供了各种类型的可视化图表,可以根据你的需求和偏好选择合适的图表进行展示。

以下是一个使用`matplotlib`库绘制柱状图的示例代码,以展示歌单收藏量和播放量的对比:

  1. import matplotlib.pyplot as plt
  2. import pandas as pd

  3. # 从CSV文件中读取歌单详情页信息
  4. df = pd.read_csv('music_data/new/music_detail.csv')

  5. # 提取歌单收藏量和播放量列的数据
  6. collection = df['collection']
  7. play = df['play']

  8. # 创建柱状图
  9. plt.bar(df['title'], collection, label='Collection')
  10. plt.bar(df['title'], play, label='Play')

  11. # 设置图表标题和标签
  12. plt.title('Collection and Play Comparison')
  13. plt.xlabel('Music List')
  14. plt.ylabel('Count')

  15. # 添加图例
  16. plt.legend()

  17. # 显示图表
  18. plt.show()
复制代码


你可以根据需要,对该示例代码进行修改和调整,以满足你的具体需求。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-29 09:05:16 | 显示全部楼层
豪在这学python 发表于 2024-5-29 09:03
"""数据获取,获取歌单详情页的信息"""
from bs4 import BeautifulSoup
import pandas as pd

优化这段代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-29 09:05:31 | 显示全部楼层


以下是对代码进行优化的示例,包括改进循环,使用列表推导式和写入CSV文件的方式:

  1. from bs4 import BeautifulSoup
  2. import pandas as pd
  3. import requests
  4. import time


  5. def get_data_of_music_list_detail_page():
  6.     """获取歌单详情页的信息"""
  7.     df = pd.read_csv('music_data/new/music_list.csv', header=None, on_bad_lines=None, names=)

  8.     headers = {
  9.         'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (HTML, like Gecko) '
  10.                       'Chrome/63.0.3239.132 Safari/537.36 '
  11.     }

  12.     print("正在获取歌单详情页的信息...")

  13.     # 输出进度条
  14.     t = 60
  15.     start = time.perf_counter()

  16.     for i in range(t + 1):
  17.         finsh = "-" * i
  18.         need_do = "-" * (t - i)
  19.         progress = (i / t) * 100
  20.         dur = time.perf_counter() - start

  21.         print("\r{:^3.0f}% [{}->{}] {:.2f}s".format(progress, finsh, need_do, dur), end="")
  22.         time.sleep(0.02)

  23.     results = []
  24.   
  25.     for i in df:
  26.         time.sleep(2)
  27.         url = 'https://music.163.com' + i
  28.         response = requests.get(url=url, headers=headers)
  29.         html = response.text
  30.         soup = BeautifulSoup(html, 'html.parser')

  31.         # 获取歌单标题
  32.         title = soup.select_one('h2').get_text().replace(',', ',')

  33.         # 获取标签
  34.         tags = [p.get_text() for p in soup.select('.u-tag i')]
  35.         tag = '-'.join(tags) if len(tags) > 1 else tags[0] if tags else ""

  36.         # 获取歌单介绍
  37.         text = soup.select_one('#album-desc-more').get_text().replace('\n', '').replace(',', ',') if soup.select_one(
  38.             '#album-desc-more') else '无'

  39.         # 获取歌单收藏量
  40.         collection = soup.select_one('#content-operation i').get_text().replace('(', '').replace(')', '')

  41.         # 歌单播放量
  42.         play = soup.select_one('.s-fc6').get_text()

  43.         # 歌单内歌曲数
  44.         songs = soup.select_one('#playlist-track-count').get_text()

  45.         # 歌单评论数
  46.         comments = soup.select_one('#cnt_comment_count').get_text()

  47.         # 获取歌单内歌曲名称
  48.         li = soup.select('.f-hide li a')
  49.         music_names = [j.get_text() for j in li]

  50.         result = (title, tag, text, collection, play, songs, comments, music_names)
  51.         results.append(result)

  52.     # 将详情页信息写入CSV文件中
  53.     with open('music_data/new/music_detail.csv', 'a+', encoding='utf-8-sig') as f:
  54.         for r in results:
  55.             f.write(','.join(r[:7]) + '\n')

  56.     # 将歌单内歌曲名称写入CSV文件中
  57.     with open('music_data/new/music_name.csv', 'a+', encoding='utf-8-sig') as f:
  58.         for r in results:
  59.             for name in r[7]:
  60.                 f.write(name + '\n')

  61.     print("\n已获取歌单详情页的信息,保存至 music_data/new/music_detail.csv 和 music_data/new/music_name.csv")
复制代码


这个版本中,使用`select_one()`方法来选择只有一个匹配元素的选择器,使用列表推导式简化了代码,同时将结果保存在列表中进一步减少了循环嵌套。同时,将文件写入部分也进行了优化,避免多次打开和关闭文件。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-29 09:07:49 | 显示全部楼层
FishC 发表于 2024-5-29 09:05
以下是对代码进行优化的示例,包括改进循环,使用列表推导式和写入CSV文件的方式:

检查代码,存在错误
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-29 09:08:00 | 显示全部楼层


很抱歉,我给出的代码存在一些错误。下面是修复过的版本:

  1. from bs4 import BeautifulSoup
  2. import pandas as pd
  3. import requests
  4. import time


  5. def get_data_of_music_list_detail_page():
  6.     df = pd.read_csv('music_data/new/music_list.csv', header=None, on_bad_lines=None)
  7.     headers = {
  8.         'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (HTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
  9.     }

  10.     print("正在获取歌单详情页的信息...")

  11.     # 输出进度条
  12.     t = 60
  13.     start = time.perf_counter()

  14.     for i in range(t + 1):
  15.         finsh = "=" * i
  16.         need_do = "-" * (t - i)
  17.         progress = (i / t) * 100
  18.         dur = time.perf_counter() - start

  19.         print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(progress, finsh, need_do, dur), end="")
  20.         time.sleep(0.02)

  21.     for index, row in df.iterrows():
  22.         time.sleep(2)
  23.         url = 'https://music.163.com' + row[0]
  24.         response = requests.get(url=url, headers=headers)
  25.         html = response.text
  26.         soup = BeautifulSoup(html, 'html.parser')

  27.         # 获取歌单标题
  28.         title = soup.select('.tit h2')[0].get_text().replace(',', ',')

  29.         # 获取标签
  30.         tags = [tag.get_text() for tag in soup.select('.tags .u-tag')]

  31.         # 对标签进行格式化
  32.         tag = '-'.join(tags) if len(tags) > 1 else tags[0]

  33.         # 获取歌单介绍
  34.         text = soup.select('#album-desc-more')[0].get_text().replace('\n', '').replace(',', ',') if soup.select(
  35.             '#album-desc-more') else '无'

  36.         # 获取歌单收藏量
  37.         collection = soup.select('#content-operation span')[1].get_text().replace('(', '').replace(')', '')

  38.         # 歌单播放量
  39.         play = soup.select('.play span')[0].get_text()

  40.         # 歌单内歌曲数
  41.         songs = soup.select('.sub.s-fc3')[0].get_text()

  42.         # 歌单评论数
  43.         comments = soup.select('#cnt_comment_count')[0].get_text()

  44.         # 输出歌单详情页信息
  45.         print('\r', title, tag, text, collection, play, songs, comments, end='', flush=True)

  46.         # 将详情页信息写入CSV文件中
  47.         with open('music_data/new/music_detail.csv', 'a+', encoding='utf-8-sig') as f:
  48.             f.write(','.join([title, tag, text, collection, play, songs, comments]) + '\n')

  49.         # 获取歌单内歌曲名称
  50.         music_names = [li.get_text() for li in soup.select('.f-hide li a')]

  51.         # 将歌曲名称写入CSV文件中
  52.         with open('music_data/new/music_name.csv', 'a+', encoding='utf-8-sig') as f:
  53.             f.writelines('\n'.join(music_names))

  54.     print("\n已获取歌单详情页的信息,保存至 music_data/music_name.csv")
复制代码


此优化版本对于循环中的进度条输出进行了改进,同时修正了一些数据提取和写入CSV文件的问题。注意,在运行之前确保已安装所需的库。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-29 09:09:20 | 显示全部楼层
FishC 发表于 2024-5-29 09:08
很抱歉,我给出的代码存在一些错误。下面是修复过的版本:

raise ValueError(f"Argument {on_bad_lines} is invalid for on_bad_lines")
ValueError: Argument None is invalid for on_bad_lines
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-29 09:09:31 | 显示全部楼层
豪在这学python 发表于 2024-05-29 09:09
raise ValueError(f"Argument {on_bad_lines} is inva ...


抱歉,这是由于`pd.read_csv`中的`on_bad_lines`参数值为`None`导致的错误。此参数已经被移除,因此请删除该参数。以下是修复后的代码:

  1. from bs4 import BeautifulSoup
  2. import pandas as pd
  3. import requests
  4. import time

  5. def get_data_of_music_list_detail_page():
  6.     df = pd.read_csv('music_data/new/music_list.csv', header=None, names=['URL'])
  7.     headers = {
  8.         'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (HTML, like Gecko) '
  9.                       'Chrome/63.0.3239.132 Safari/537.36'
  10.     }
  11.     print("正在获取歌单详情页的信息...")
  12.     for i, row in df.iterrows():
  13.         url = 'https://music.163.com' + row['URL']
  14.         response = requests.get(url=url, headers=headers)
  15.         html = response.text
  16.         soup = BeautifulSoup(html, 'html.parser')
  17.         
  18.         # 获取歌单标题
  19.         title = soup.select('h2')[0].get_text().replace(',', ',')
  20.         
  21.         # 获取标签
  22.         tags = []
  23.         tags_message = soup.select('.u-tag i')
  24.         for p in tags_message:
  25.             tags.append(p.get_text())
  26.         tag = '-'.join(tags) if len(tags) > 1 else tags[0]
  27.         
  28.         # 获取歌单介绍
  29.         text = soup.select('#album-desc-more')[0].get_text().replace('\n', '').replace(',', ',') if soup.select('#album-desc-more') else '无'
  30.         
  31.         # 获取歌单收藏量
  32.         collection = soup.select('#content-operation span.subscribed-count')[0].get_text()
  33.         
  34.         # 歌单播放量
  35.         play = soup.select('.s-fc6')[0].get_text()
  36.         
  37.         # 歌单内歌曲数
  38.         songs = soup.select('#playlist-track-count')[0].get_text()
  39.         
  40.         # 歌单评论数
  41.         comments = soup.select('#cnt_comment_count')[0].get_text()
  42.         
  43.         print(title, tag, text, collection, play, songs, comments)
  44.         
  45.         # 将详情页信息写入CSV文件中
  46.         with open('music_data/new/music_detail.csv', 'a+', encoding='utf-8-sig') as f:
  47.             f.write(f"{title},{tag},{text},{collection},{play},{songs},{comments}\n")
  48.         
  49.         # 获取歌单内歌曲名称
  50.         li = soup.select('.f-hide li a')
  51.         for j in li:
  52.             with open('music_data/new/music_name.csv', 'a+', encoding='utf-8-sig') as f:
  53.                 f.write(j.get_text() + '\n')

  54.     print("已获取歌单详情页的信息,保存至 music_data/music_name.csv")
复制代码


请注意,修复后的代码假设了`music_data/new/music_list.csv`文件的格式为一列URL。同时,请确保你已经安装了必要的库,如`beautifulsoup4`和`pandas`。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-29 09:11:06 | 显示全部楼层
FishC 发表于 2024-5-29 09:09
抱歉,这是由于`pd.read_csv`中的`on_bad_lines`参数值为`None`导致的错误。此参数已经被移除,因此请 ...

代码没有达到需要的效果
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-29 09:11:19 | 显示全部楼层
豪在这学python 发表于 2024-05-29 09:11
代码没有达到需要的效果


非常抱歉,我之前的回答可能没有达到你需要的效果。下面是修正后的代码:

  1. from bs4 import BeautifulSoup
  2. import pandas as pd
  3. import requests
  4. import time


  5. def get_data_of_music_list_detail_page():
  6.     df = pd.read_csv('music_data/new/music_list.csv', header=None, names=['url'])

  7.     headers = {
  8.         'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (HTML, like Gecko) '
  9.                       'Chrome/63.0.3239.132 Safari/537.36 '
  10.     }

  11.     print("正在获取歌单详情页的信息...")

  12.     for index, row in df.iterrows():
  13.         time.sleep(2)

  14.         url = 'https://music.163.com' + row['url']
  15.         response = requests.get(url=url, headers=headers)
  16.         html = response.text
  17.         soup = BeautifulSoup(html, 'html.parser')

  18.         title = soup.select('h2')[0].getText().replace(',', ',')
  19.         tags = [i.get_text() for i in soup.select('.u-tag i')]
  20.         tag = '-'.join(tags) if len(tags) > 1 else tags[0]
  21.         text = soup.select('#album-desc-more')[0].get_text().replace('\n', '').replace(',', ',') \
  22.             if soup.select('#album-desc-more') else '无'
  23.         collection = soup.select('#content-operation i')[0].get_text().replace('(', '').replace(')', '')
  24.         play = soup.select('.s-fc6')[0].get_text()
  25.         songs = soup.select('#playlist-track-count')[0].get_text()
  26.         comments = soup.select('#cnt_comment_count')[0].get_text()

  27.         print(title, tag, text, collection, play, songs, comments)

  28.         with open('music_data/new/music_detail.csv', 'a+', encoding='utf-8-sig') as f:
  29.             f.write(f"{title},{tag},{text},{collection},{play},{songs},{comments}\n")

  30.         li = soup.select('.f-hide li a')

  31.         with open('music_data/new/music_name.csv', 'a+', encoding='utf-8-sig') as f:
  32.             for j in li:
  33.                 f.write(j.get_text() + '\n')

  34.     print("已获取歌单详情页的信息,保存至 music_data/music_name.csv")
复制代码


请确保你已经正确设置了文件路径,并提供正确的`music_list.csv`文件,其中包含歌单的URL。这个修正后的代码应该能够获取歌单详情页的信息并保存到相应的CSV文件中。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-29 09:17:43 | 显示全部楼层
FishC 发表于 2024-5-29 09:11
非常抱歉,我之前的回答可能没有达到你需要的效果。下面是修正后的代码:

ValueError: Argument None is invalid for on_bad_lines
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 00:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表