码迷,mamicode.com
首页 > 其他好文 > 详细

爬取酷狗音乐Top500

时间:2018-06-23 20:46:02      阅读:406      评论:0      收藏:0      [点我收藏+]

标签:lis   _for   post   chrome   路径   ips   导入   mat   timeout   

开发环境: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

标签:lis   _for   post   chrome   路径   ips   导入   mat   timeout   

原文地址:https://www.cnblogs.com/cqutong2/p/9218417.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!