一、主题式网络爬虫设计方案
1.网络爬虫名称:Python爬取虾米音乐排行榜
2.网络爬虫爬取的内容与数据特征分析:爬取玩家评论的数据,分析各类数据之间的特征与关系
3.网络爬虫设计方案概述:
思路:爬取数据,分析html页面,标记需要的数据标签,对数据提取、处理、可视化、绘制图形、保存数据
二、主题页面的结构特征分析
1、主题页面的结构与特征分析:
需要爬取的内容如下:
以 https://www.xiami.com/billboard/306
为例:
2、页面解析:
三、网络爬虫程序设计
1.数据爬取与采集:
获取网页数据:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import requests #获取虾米网页数据 def getHtml(url): try: # 伪装UA ua = {'user-agent': 'Mozilla/5.0 Chrome/79.0.3945.88 Safari/537.36'} # 读取网页 r = requests.get(url, headers=ua) # 获取状态 r.raise_for_status() # 打印数据 print(r.text) # 返回数据 return r.text except: return "Fail"
数据分析:
from bs4 import BeautifulSoup def parseHtml(html): # 数据数组 datas = [] # 结构解析 soup = BeautifulSoup(html, "html.parser") # 获取排名 ids = soup.select('.em.index') # 组号 i = 0 # 循环排名号 for id in ids: # 字典 data = {} # 获取编号 idd = id.get_text() # 打印数据 print(idd) # 获取歌曲名 titles = soup.select('.song-name.em')[i].get_text() # 打印数据 print(titles) # 获取歌手 songer = soup.select('.singers.COMPACT')[i].get_text() # 打印数据 print(songer) # 获取专辑 album = soup.select('.album')[i].get_text() # 打印数据 print(album) # 获取时长 duration = soup.select('.duration')[i].get_text() # 打印数据 print(duration) # 数组 i = i + 1 # 加入字典 data['#'] = idd data['歌曲'] = titles data['歌手'] = songer data['专辑'] = album data['时长'] = duration # 加入数组 datas.append(data) # 返回数组 return datas
写入Excle表格,分析数据更方便:
import records # 初始化组件 results = records.RecordCollection(iter(list)) # 文件流 with open('list.xlsx', 'wb') as f: # 写入 f.write(results.export('xlsx'))
运行结果:
完整代码
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import requests from bs4 import BeautifulSoup import records def getHtml(url): ''' 获取目标网页数据 ''' try: # 伪装UA ua = {'user-agent': 'Mozilla/5.0'} # 读取网页 r = requests.get(url, headers=ua) # 获取状态 r.raise_for_status() # 打印数据 print(r.text) # 返回数据 return r.text except: return "Fail" def parseHtml(html): # 数据数组 datas = [] # 结构解析 soup = BeautifulSoup(html, "html.parser") # 获取排名 ids = soup.select('.em.index') # 组号 i = 0 # 循环排名号 for id in ids: # 字典 data = {} # 获取编号 idd = id.get_text() # 打印数据 print(idd) # 获取歌曲名 titles = soup.select('.song-name.em')[i].get_text() # 打印数据 print(titles) # 获取歌手 songer = soup.select('.singers.COMPACT')[i].get_text() # 打印数据 print(songer) # 获取专辑 album = soup.select('.album')[i].get_text() # 打印数据 print(album) # 获取时长 duration = soup.select('.duration')[i].get_text() # 打印数据 print(duration) # 链接 .song-name.em > a a = 'https://www.xiami.com' + soup.select('.song-name.em > a')[i].get('href') # 打印数据 print(a) # 数组 i = i + 1 # 加入字典 data['#'] = idd data['歌曲'] = titles data['歌手'] = songer data['专辑'] = album data['时长'] = duration data['链接'] = a # 加入数组 datas.append(data) # 返回数组 return datas def main(): # url url = "https://www.xiami.com/billboard/306" # 获取网页数据 html = getHtml(url) # 解析网页结构 list = parseHtml(html) # 初始化组件 results = records.RecordCollection(iter(list)) # 文件流 with open('list.xlsx', 'wb') as f: # 写入 f.write(results.export('xlsx')) main()
四、结论(10分)
对本次程序设计任务完成的情况做一个简单的小结。
python很高效率,以后做调查调研更加方便了!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?