FishC
发表于 2024-5-29 09:17:59
豪在这学python 发表于 2024-05-29 09:17
ValueError: Argument None is invalid for on_bad_li ...
抱歉,我给出的修正代码仍然存在问题。关于`on_bad_lines`参数的使用是不正确的。
下面是一个修复后的版本,删除了`on_bad_lines`参数:
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, names=["music_list_url"])
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("正在获取歌单详情页的信息...")
for i in range(len(df)):
time.sleep(2)
url = 'https://music.163.com' + df["music_list_url"]
response = requests.get(url=url, headers=headers)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
# 解析数据并执行相关操作
# 输出歌单详情页信息
print("已获取歌单详情页的信息,保存至 music_data/music_detail.csv")
get_data_of_music_list_detail_page()
注意:你需要根据实际情况修改列名称和相关数据解析的代码。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
豪在这学python
发表于 2024-5-29 09:41:14
FishC 发表于 2024-5-29 09:11
非常抱歉,我之前的回答可能没有达到你需要的效果。下面是修正后的代码:
ValueError: Argument None is invalid for on_bad_lines
FishC
发表于 2024-5-29 09:41:25
豪在这学python 发表于 2024-05-29 09:41
ValueError: Argument None is invalid for on_bad_li ...
非常抱歉,前面的回答中给出的代码依然存在问题。`on_bad_lines`参数已不再支持。
以下是修复后的代码:
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, names=['url'], sep=',')
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("正在获取歌单详情页的信息...")
for i, row in df.iterrows():
url = 'https://music.163.com' + row['url']
response = requests.get(url=url, headers=headers)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
# 获取歌单标题
title = soup.select('h2').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 if tags else ''
# 获取歌单介绍
desc_element = soup.select('#album-desc-more')
text = desc_element.get_text().replace('\n', '').replace(',', ',') if desc_element else '无'
# 获取歌单收藏量
collection = soup.select('#content-operation i').get_text().replace('(', '').replace(')', '')
# 歌单播放量
play = soup.select('.s-fc6').get_text()
# 歌单内歌曲数
songs = soup.select('#playlist-track-count').get_text()
# 歌单评论数
comments = soup.select('#cnt_comment_count').get_text()
# 输出歌单详情页信息
print(title, tag, text, collection, play, songs, comments)
# 将详情页信息写入CSV文件中
with open('music_data/new/music_detail.csv', 'a+', encoding='utf-8-sig') as f:
f.write(f"{title},{tag},{text},{collection},{play},{songs},{comments}\n")
# 获取歌单内歌曲名称
li = soup.select('.f-hide li a')
with open('music_data/new/music_name.csv', 'a+', encoding='utf-8-sig') as f:
for j in li:
f.write(j.get_text() + '\n')
print("已获取歌单详情页的信息,保存至 music_data/music_name.csv")
请确保已经将`music_data/new/music_list.csv`文件正确准备,并检查文件路径是否正确。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
豪在这学python
发表于 2024-5-29 09:58:39
FishC 发表于 2024-5-29 09:11
非常抱歉,我之前的回答可能没有达到你需要的效果。下面是修正后的代码:
报错了ValueError: Argument None is invalid for on_bad_lines
FishC
发表于 2024-5-29 09:59:07
豪在这学python 发表于 2024-05-29 09:58
报错了ValueError: Argument None is invalid for on_ ...
非常抱歉,之前的回答中给出的代码依然有问题。`on_bad_lines`参数已被移除,不再支持。
以下是修复后的代码:
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, names=['url'], encoding='utf-8')
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/63.0.3239.132 Safari/537.36'
}
print("正在获取歌单详情页的信息...")
for url in df['url']:
time.sleep(2)
url = 'https://music.163.com' + url
response = requests.get(url=url, headers=headers)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
# 获取歌单标题
title = soup.select_one('h2.f-ff2').get_text().replace(',', ',')
# 获取标签
tags = []
tags_message = soup.select('.u-tag i')
for tag in tags_message:
tags.append(tag.get_text())
# 对标签进行格式化
tag_str = '-'.join(tags)
# 获取歌单介绍
desc_elem = soup.select_one('#album-desc-more')
text = desc_elem.get_text().strip().replace('\n', '').replace(',', ',') if desc_elem else '无'
# 获取歌单收藏量
collection = soup.select_one('.u-btni.u-btni-fav i').next_sibling.strip().replace('(', '').replace(')', '')
# 歌单播放量
play = soup.select_one('.u-btni.u-btni-play i').next_sibling.strip()
# 歌单内歌曲数
songs = soup.select_one('.sub.s-fc3').get_text().split(':').strip()
# 歌单评论数
comments = soup.select_one('.sub.s-fc3.j-cmt').get_text().split(':').strip()
# 输出歌单详情页信息
print(title, tag_str, text, collection, play, songs, comments)
# 将详情页信息写入CSV文件中
with open('music_data/new/music_detail.csv', 'a+', encoding='utf-8-sig') as f:
f.write(f"{title},{tag_str},{text},{collection},{play},{songs},{comments}\n")
请尝试使用这段修复后的代码,希望能满足你的需求。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
豪在这学python
发表于 2024-5-29 10:00:32
FishC 发表于 2024-5-29 09:59
非常抱歉,之前的回答中给出的代码依然有问题。`on_bad_lines`参数已被移除,不再支持。
以下是修复 ...
FileNotFoundError: No such file or directory: 'music_data/new/music_list.csv'
FishC
发表于 2024-5-29 10:00:46
豪在这学python 发表于 2024-05-29 10:00
FileNotFoundError:No such file or directory: 'mu ...
这个错误意味着程序找不到指定的文件路径 `'music_data/new/music_list.csv'`。请确保在代码运行之前,已经创建了正确的文件路径,并将数据文件 `music_list.csv` 放置在该路径下。如果文件不存在,请先创建文件或者修改文件路径。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
豪在这学python
发表于 2024-5-29 10:06:19
FishC 发表于 2024-5-29 10:00
这个错误意味着程序找不到指定的文件路径 `'music_data/new/music_list.csv'`。请确保在代码运行之前, ...
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='music.163.xn--com-y38dykmnn2zk24e8l7cca', port=443): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x000002427C650890>: Failed to resolve 'music.163.xn--com-y38dykmnn2zk24e8l7cca' ( getaddrinfo failed)"))
FishC
发表于 2024-5-29 10:06:29
豪在这学python 发表于 2024-05-29 10:06
requests.exceptions.ConnectionError: HTTPSConnecti ...
这个错误通常是由于无法解析主机名导致的。它表明程序无法通过给定的URL连接到主机。请确保你的URL正确并且能够访问。如果你在URL中使用了类似 `music.163.xn--com-y38dykmnn2zk24e8l7cca` 的主机名,请检查是否出现了拼写错误。另外,请确保你有网络连通性,并且可以访问该主机。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
豪在这学python
发表于 2024-5-29 10:08:09
FishC 发表于 2024-5-29 10:06
这个错误通常是由于无法解析主机名导致的。它表明程序无法通过给定的URL连接到主机。请确保你的URL正确 ...
如何检查?
FishC
发表于 2024-5-29 10:08:19
豪在这学python 发表于 2024-05-29 10:08
如何检查?
请确保你在代码中使用了正确的URL。检查主机名是否正确拼写,并确认URL是否包含了协议(如https://)。另外,确保你的网络连接正常,并且可以通过浏览器访问到该URL。
如果问题仍然存在,请尝试使用其他可用的URL来进行测试,以确定是否是特定主机的连接问题。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
豪在这学python
发表于 2024-5-29 10:09:22
FishC 发表于 2024-5-29 10:08
请确保你在代码中使用了正确的URL。检查主机名是否正确拼写,并确认URL是否包含了协议(如https://)。 ...
主机名是哪个参数?
FishC
发表于 2024-5-29 10:09:31
豪在这学python 发表于 2024-05-29 10:09
主机名是哪个参数?
在URL中,主机名是指域名部分,即`https://music.163.com`中的`music.163.com`。如果你使用了其他的URL,请确保将正确的主机名填入代码中。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
豪在这学python
发表于 2024-5-29 10:10:11
FishC 发表于 2024-5-29 10:09
在URL中,主机名是指域名部分,即`https://music.163.com`中的`music.163.com`。如果你使用了其他的URL ...
这里主机名正确
FishC
发表于 2024-5-29 10:10:17
豪在这学python 发表于 2024-05-29 10:10
这里主机名正确
如果你已经确认了主机名正确,但仍然遇到连接错误,可能是由于网络问题或目标网站的访问限制导致的。你可以尝试以下方法来排除问题:
1. 确保你的网络连接正常,可以访问其他网站。
2. 检查网站是否有任何访问限制、验证码或需要登录的要求。有些网站可能会限制非人工操作的访问。
3. 尝试使用代理服务器进行访问。有时候,使用代理服务器可以解决访问限制问题。
4. 如果你能够通过浏览器成功访问该网站,但在代码中仍然遇到问题,可能是由于代码中的其他问题导致。确保你的代码没有其他错误,例如URL格式不正确、请求头缺失等。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
豪在这学python
发表于 2024-5-29 10:12:17
FishC 发表于 2024-5-29 10:10
如果你已经确认了主机名正确,但仍然遇到连接错误,可能是由于网络问题或目标网站的访问限制导致的。你 ...
我将url换成了QQ音乐的网址,但是出现了这样的错误:AttributeError: 'NoneType' object has no attribute 'get_text'
FishC
发表于 2024-5-29 10:12:28
豪在这学python 发表于 2024-05-29 10:12
我将url换成了QQ音乐的网址,但是出现了这样的错误:A ...
这个错误指示在你的代码中尝试对`NoneType`对象调用`get_text()`方法,而该对象并不存在。通常这是因为BeautifulSoup未能找到对应的HTML元素。请确保你使用正确的选择器定位到了想要获取文本的HTML元素。
另外,请确保你从QQ音乐网址上正确获取到了HTML内容并进行了解析。检查网络请求是否成功,并通过打印输出确认BeautifulSoup解析的结果是否正确。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
FishC
发表于 2024-5-29 10:14:11
豪在这学python 发表于 2024-05-29 10:13
能否通过以上总结错误正确修改一下代码?from bs4 imp ...
以下是修改后的代码,修复了之前提到的错误:
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/music_list.csv', header=None, names=['url'], encoding='utf-8')
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/63.0.3239.132 Safari/537.36'
}
print("正在获取歌单详情页的信息...")
for _, row in df.iterrows():
url = 'https://y.qq.com/n/ryqq/index.html' + row['url']
response = requests.get(url=url, headers=headers)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
# 获取歌单标题
title_elem = soup.select_one('h2.f-ff2')
title = title_elem.get_text().replace(',', ',') if title_elem else ''
# 获取标签
tags_elem = soup.select('.u-tag i')
tags =
# 对标签进行格式化
tag_str = '-'.join(tags)
# 获取歌单介绍
desc_elem = soup.select_one('#album-desc-more')
text = desc_elem.get_text().strip().replace('\n', '').replace(',', ',') if desc_elem else '无'
# 获取歌单收藏量
collection_elem = soup.select_one('.u-btni.u-btni-fav i')
collection = collection_elem.next_sibling.strip().replace('(', '').replace(')', '') if collection_elem else '0'
# 歌单播放量
play_elem = soup.select_one('.u-btni.u-btni-play i')
play = play_elem.next_sibling.strip() if play_elem else '0'
# 歌单内歌曲数
songs_elem = soup.select_one('.sub.s-fc3')
songs = songs_elem.get_text().split(':').strip() if songs_elem else '0'
# 歌单评论数
comments_elem = soup.select_one('.sub.s-fc3.j-cmt')
comments = comments_elem.get_text().split(':').strip() if comments_elem else '0'
# 输出歌单详情页信息
print(title, tag_str, text, collection, play, songs, comments)
# 将详情页信息写入CSV文件中
with open('music_data/music_detail.csv', 'a+', encoding='utf-8-sig') as f:
f.write(f"{title},{tag_str},{text},{collection},{play},{songs},{comments}\n")
注意,修改后的代码使用了`df.iterrows()`来迭代DataFrame中的行,同时使用了`.select_one()`来选取唯一的元素,以避免NoneType的错误。另外,增加了对不存在元素的判断,以避免出现异常。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
豪在这学python
发表于 2024-5-29 10:18:04
FishC 发表于 2024-5-29 10:14
以下是修改后的代码,修复了之前提到的错误:
一直出现 无 0 0 0 0
无 0 0 0 0
无 0 0 0 0
无 0 0 0 0结果
FishC
发表于 2024-5-29 10:18:17
豪在这学python 发表于 2024-05-29 10:18
一直出现 无 0 0 0 0
无 0 0 0 0
无 0 0 0 0
...
如果出现了一直打印 `无 0 0 0 0` 的结果,可能是因为在解析HTML时无法找到相应的元素。请确保你使用的选择器 `select_one` 或 `select` 能够准确地定位到目标元素。
另外,请检查网址是否正确,并确保能够正常访问该网页。如果问题仍然存在,请提供更多的代码上下文或相关信息,以便我能更好地帮助你排查问题。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。