Python网页爬取问题:电台曲目信息合并与播放时间提取
解决方案
问题1:合并艺术家与曲目名称
每个曲目所在的div.title里,艺术家被<b>标签包裹,我们可以分别提取标签内文本和剩余文本,再清理多余格式:
- 用
track_item.find("b").text.strip()获取纯净的艺术家名称 - 用
track_item.text.replace(artist, "").strip().lstrip("-").strip()移除艺术家部分,清理掉多余的-和空格,得到曲目名
问题2:提取播放时间
播放时间所在的span标签带有专属属性data-name="translated-song-time",可以通过find_next_sibling定位到div.title的同级span元素,直接提取文本内容即可。
完整代码
import requests from bs4 import BeautifulSoup import pandas as pd url = 'https://raddio.net/112842-loversrock-radio/playlist/' r = requests.get(url) soup = BeautifulSoup(r.text, "lxml") # 获取电台名称 station = soup.find("h1").text.strip() print(station) # 存储曲目数据的列表 track_data = [] # 遍历所有曲目标题容器 all_track_items = soup.find_all("div", class_="title") for track_item in all_track_items: # 提取艺术家 artist = track_item.find("b").text.strip() # 提取并清理曲目名称 track_name = track_item.text.replace(artist, "").strip().lstrip("-").strip() # 提取播放时间 play_time = track_item.find_next_sibling("span", {"data-name": "translated-song-time"}).text.strip() # 添加到数据列表 track_data.append({ "艺术家": artist, "曲目名称": track_name, "播放时间": play_time }) # 转换为Pandas DataFrame df = pd.DataFrame(track_data) print(df) # 可选:保存为CSV文件 # df.to_csv("电台曲目列表.csv", index=False, encoding="utf-8-sig")
补充说明
如果HTML结构中时间span不是title的直接兄弟元素,可改用track_item.parent.find("span", {"data-name": "translated-song-time"}),从父容器内查找时间标签。
内容的提问来源于stack exchange,提问作者TriggerThumb
相关产品推荐
相关产品推荐

