爬取酷狗音乐Top500
Posted cqutong2
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬取酷狗音乐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_Projectsspiderskugou500.text‘,‘a+‘) try: f.write(data_list[‘rank‘]+‘ ‘) f.write(data_list[‘signer‘] + ‘ ‘) f.write(data_list[‘song‘] + ‘ ‘) f.write(data_list[‘time‘] + ‘ ‘) 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的主要内容,如果未能解决你的问题,请参考以下文章