selenium和phantomjs,完成豆瓣音乐排行榜的内容爬取

代码要多敲 注释要清晰 哪怕再简单

#使用selenium和phantomjs,完成豆瓣音乐排行榜的内容爬取
#地址:https://music.douban.com/chart

#导入需要的模块
from selenium import webdriver
import os
from lxml import etree
import time
from bs4 import BeautifulSoup
#生成浏览器对象
driver = webdriver.PhantomJS()

#创建文件夹存储music信息
root_dir = 'douban_music'
if not os.path.exists(root_dir):
    os.mkdir(root_dir)

#抓取页面函数
def spider():
    base_url = 'https://music.douban.com/chart'
    #用浏览器获取网页
    driver.get(base_url)
    #等待页面加载
    time.sleep(4)
    # 获取页面资源
    content = driver.page_source
    # print(content)


    #在解析函数中解析页面元素
    content_parser(content)

def content_parser(content):
    # 用xpath解析得到的页面资源  将content生成树结构
    tree = etree.HTML(content)
    # print(tree)
    #拿取所有的歌曲列表
    music_list = tree.xpath('//ul[@class="col5"]/li[@class="clearfix"]')
    #遍历所有的歌曲列表
    for music in music_list:

        #拿取歌曲排名
        music_ranking = music.xpath('.//span[@class="green-num-box"]')
        #判断歌曲排名是否是非空
        if music_ranking != []:
            #获取歌曲排名文本信息
            music_ranking = music_ranking[0].text

        #拿取图片信息链接
        music_src = music.xpath('./a/img/@src')
        if music_src != []:
            music_src = music_src[0]

        #拿取歌曲名称
        music_name = music.xpath('./div/h3/a')
        if music_name != []:
            music_name = music_name[0].text
        else:
            #有一部分歌曲名的xpath路径不一样
            music_name = music.xpath('./div/p/a')[0].text

        #拿取singer歌手名称以及播放次数
        singer = music.xpath('./div/p')
        # print(list(singer))
        if singer != []:
            #歌手没有全部拿取
            singer = singer[0].text

        #拿取上榜天数
        music_days = music.xpath('./span')

        # 趋势
        music_trend = music_days[2].text
        if music_days != []:
            music_days = music_days[1].text

        #打印所有拿取到的歌曲信息
        print(music_ranking,music_src,music_name,singer,music_days,music_trend)

#主进程
if __name__ == '__main__':
    spider()

'''
music:
<ul class="col5">
    
    <li class="clearfix">
        <span class="green-num-box">1</span>
        <a class="face" href="https://site.douban.com/baishui/" target="_blank">
            <img src="https://img3.doubanio.com/view/site/small/public/1aa014ef81b271d.jpg">
        </a>
        <div class="intro">
            <h3 class="icon-play" data-sid="721211">
              <a href="javascript:;">另一首情歌 (feat. 袁田)</a>
            </h3>

            <p>白水&nbsp;/&nbsp;5748次播放</p>
        </div>
        <span class="days">(上榜11天)</span>
        <span class="trend arrow-stay"> 0 </span>
    </li>
</ul>
'''

 

posted @ 2018-03-13 23:38  Bob__Zhang  阅读(215)  评论(0编辑  收藏  举报