爬取酷狗音樂Top500
開發環境:windows環境+python3+requests庫(請求)+BeautifulSoup庫(解析)
目標:爬取酷狗音樂Top500並保存到txt中
整個案例源代碼:
#導入程序需要的庫,requests庫用於請求獲取網頁,BeautifulSoup庫用於解析網頁數據,time庫、random庫用於隨機延時 import requests from bs4 import BeautifulSoup import time import random from multiprocessing import Pool #請求頭,偽裝瀏覽器,加強爬蟲的穩定性 headers = { ‘User-Agent‘:‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36‘ } #創建一個列表用於接收數據 data_lists = [] #定義爬取數據的函數 def get_info(url): global time wb_data = requests.get(url,headers = headers) soup = BeautifulSoup(wb_data.text,‘lxml‘) ranks = soup.select(‘span.pc_temp_num ‘) titles = soup.select(‘div.pc_temp_songlist > ul > li > a‘) times = soup.select(‘div.pc_temp_songlist > ul > li > span.pc_temp_tips_r > span‘) for rank,title,time in zip(ranks,titles,times): data = { ‘rank‘:rank.get_text().strip(), ‘signer‘:title.get_text().strip().split(‘-‘)[0], ‘song‘:title.get_text().strip().split(‘-‘)[-1], ‘time‘:time.get_text().strip() } print(data) data_lists.append(data) if __name__ == ‘__main__‘: urls = [‘http://www.kugou.com/yy/rank/home/{}-8888.html‘.format(str(i)) for i in range(1,3)] start_time1 = time.time() for url in urls: get_info(url) time.sleep(random.randint(1, 5)) end_time1 = time.time() print("單個進程爬取酷狗音樂Top500用的時間:",end_time1 - start_time1) #將數據寫入txt文檔 for data_list in data_lists: f = open(‘D:\Pycharm_Projects\spiders\kugou500.text‘,‘a+‘) try: f.write(data_list[‘rank‘]+‘\n‘) f.write(data_list[‘signer‘] + ‘\n‘) f.write(data_list[‘song‘] + ‘\n‘) f.write(data_list[‘time‘] + ‘\n‘) f.close() except UnicodeEncodeError: pass
1、requests庫的用法
import requests res = requests,get(‘url‘) print(res) #若為<Response [200]>則正常,若狀態嗎為404 或者400則表示請求失敗 print(res.text)#打印請求的網頁源碼信息
此外,requests庫還有get()方法,和post()等方法。對於異常處理主要有ConnectionError、Response.raise_for_status()、Timeout、TooManyRedirects等,詳情參看requets庫的官方文檔:http://docs.python-requests.org/zh_CN/latest/
2.BeautifulSoup庫的簡單用法
BeautifulSoup庫可以輕松的解析requests庫請求得到的網頁,並把網頁源代碼解析為Soup文檔。BeautifulSoup解析得到的Soup文檔與requests庫請求得到的網頁源碼相比,Soup文檔是按標準縮進格式輸出。
from bs4 import BeautifulSoup soup = BeautifulSoup(res.text,‘lxml‘) #查找想要的元素,一般主要用find_all()方法和selector()方法· soup.find_all(tag,attributes) titles = soup.select(‘div.pc_temp_songlist > ul > li > a‘)
其他更多用法,參看BeautifulSoup文檔:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
3、python中文件對象的讀取操作
一般主要通過f.write()和f.read()方法(這裏假設文件的名為f)。
寫入內容:
f = open(‘xxxx路徑/xx.txt‘,‘w+’)
f.write(‘hello world‘)
讀出內容:
f = open(‘xxxx路徑/xx.txt‘,‘w+’)
content = f.read()
print(content)
最後,通常文件讀寫操作完成之後,需要關閉文件,采用f.close()方法。這樣可以保證Python進行緩沖的清理(處於效率的考慮而把數據臨時存儲在內存中)和文件的安全性。
爬取酷狗音樂Top500