• python爬虫实例——爬取歌单


    学习自<<从零开始学python网络爬虫>>

    爬取酷狗歌单,保存入csv文件

    直接上源代码:(含注释)

    import requests                     #用于请求网页获取网页数据
    from bs4 import BeautifulSoup       #解析网页数据
    import time                         #time库中的sleep()方法可以让程序暂停
    import csv
    
    '''
    爬虫测试
    酷狗top500数据
    写入csv文件
    '''
    fp = open('D://kugou.csv','wt',newline='',encoding='utf-8')#创建csv
    writer = csv.writer(fp)
    writer.writerow(('rank','singer','song','time'))
    #加入请求头
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
    }
    
    #定义获取信息的函数
    def get_info(url):
        wb_data = requests.get(url,headers=headers)#get方法加入请求头
        soup = BeautifulSoup(wb_data.text,'html.parser')#对返回结果进行解析
        #定位元素位置并通过selector方法获取
        ranks = soup.select('span.pc_temp_num')
        titles = soup.select('div.pc_temp_songlist > ul > li > a')
        times = soup.select('span.pc_temp_tips_r > span')
        for rank,title,time in zip(ranks,titles,times):
            data = {
                'rank':rank.get_text().strip(),
                'singer':title.get_text().split('-')[0],
                'song':title.get_text().split('-')[0],#通过split获取歌手和歌曲信息
                'time':time.get_text().strip()#get_text()获取文本内容
            }
            writer.writerow((rank.get_text().strip(),title.get_text().split('-')[0],title.get_text().split('-')[0],time.get_text().strip()))
            # 获取爬取信息并按字典格式打印
            #print(data)
    
    #程序主入口
    if __name__ == '__main__':
        urls = ['http://www.kugou.com/yy/rank/home/{}-8888.html'.format(str(i)) for i in range(1,4)]#构造多页url
        for url in urls:
            get_info(url)#循环调用
            time.sleep(1)#每循环一次,睡眠1秒,防止网页浏览频率过快导致爬虫失败
    爬虫实例

    浏览器:Chrome

    请求头获取方法:

    网站爬取:

  • 相关阅读:
    程序员开发过程常见问题的解决方法(持续更新中....)
    android 单元测试
    浅谈android binder机制
    Android 写模块化代码注意事项
    Android View 简析
    PackageManager源码分析
    Android N做了啥
    JAVA HTTP POST参数为一个对象或数组
    Spring+Jetty+Jersey+Mybatis整合教程 无web.xml 、webapp版
    IKAnalyzer 添加扩展词库和自定义词
  • 原文地址:https://www.cnblogs.com/sengzhao666/p/11982145.html
Copyright © 2020-2023  润新知