前言
最近在練習使用python爬取互聯(lián)網(wǎng)數(shù)據(jù),特此將一些練習的案例共享弧可,由于是毫無經(jīng)驗的初學者蔑匣,所以代碼編寫還不熟練,敬請賜教棕诵。
*程序使用jupyter notebook編寫
#導入所需庫裁良,沒有提前安裝的可使用代碼pip install 庫名稱
import requests
from bs4 import BeautifulSoup
import pandas as pd
#設置請求頭,以模擬瀏覽器發(fā)起請求
headers = {'User-Agent':'***********'} #此處隱藏筆者瀏覽器的請求頭校套,讀者可復制自己瀏覽器請求頭到此處
#創(chuàng)建空列表价脾,用來儲存獲得數(shù)據(jù)
r_lis = []
n_lis = []
t_lis = []
#創(chuàng)建一個循環(huán),遍歷網(wǎng)頁(第1-5頁)
for j in range(1,6):
? ? j = str(j)
? ? url = 'https://www.kugou.com/yy/rank/home/'+j+'-8888.html?from=rank'
? ? #發(fā)起請求
????res = requests.get(url,headers=headers)
? ? html = res.text
? ? #解析獲取到的html
????soup = BeautifulSoup(html,'lxml')
? ? #通過標簽路徑獲取相關(guān)信息
? ? 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()
? ? ? ? #將數(shù)據(jù)追加到空列表
? ? ? ? r_lis.append(rank)
? ? ? ? n_lis.append(name)
? ? ? ? t_lis.append(time)
#創(chuàng)建DataFrame
df = pd.DataFrame({'排名':r_lis,'歌曲':n_lis,'時長':t_lis})
#新增日期列
import time
df['日期'] = time.strftime("%Y/%m/%d",time.localtime(time.time()))
#數(shù)據(jù)分列
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行數(shù)據(jù)
df.head(100)