前言
最近在练习使用python爬取互联网数据,特此将一些练习的案例共享,由于是毫无经验的初学者,所以代码编写还不熟练,敬请赐教。
*程序使用jupyter notebook编写
#导入所需库,没有提前安装的可使用代码pip install 库名称
import requests
from bs4 import BeautifulSoup
import pandas as pd
#设置请求头,以模拟浏览器发起请求
headers = {'User-Agent':'***********'} #此处隐藏笔者浏览器的请求头,读者可复制自己浏览器请求头到此处
#创建空列表,用来储存获得数据
r_lis = []
n_lis = []
t_lis = []
#创建一个循环,遍历网页(第1-5页)
for j in range(1,6):
j = str(j)
url = 'https://www.kugou.com/yy/rank/home/'+j+'-8888.html?from=rank'
#发起请求
res = requests.get(url,headers=headers)
html = res.text
#解析获取到的html
soup = BeautifulSoup(html,'lxml')
#通过标签路径获取相关信息
lis = soup.select('div > div > div > div > div > div > ul >li')
#遍历列表
for i in range(len(lis)):
#获取排名,并去掉多余空格
rank = lis[i].select('.pc_temp_num')[0].text.strip()
#获取歌手歌曲名,并去掉多余空格和其他多余字符串
name = lis[i].select('.pc_temp_songname')[0].text.strip().replace('\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t','')
#获取歌曲时长
time = lis[i].select('.pc_temp_time')[0].text.strip()
#将数据追加到空列表
r_lis.append(rank)
n_lis.append(name)
t_lis.append(time)
#创建DataFrame
df = pd.DataFrame({'排名':r_lis,'歌曲':n_lis,'时长':t_lis})
#新增日期列
import time
df['日期'] = time.strftime("%Y/%m/%d",time.localtime(time.time()))
#数据分列
df_new = df['歌曲'].str.split("-",expand=True)
df['歌曲名'] = df_new[0]
df['歌手'] = df_new[1]
#删除不需要的列
df.drop(columns=['歌曲'],inplace=True)
#重新对列名进行排序
L = ["排名","歌曲名","歌手","时长","日期"]
df = df.reindex(columns=L) #对列名重新排序
#输出前100行数据
df.head(100)