我的python学习笔记(三)

今天闲的无聊,于是来试着学习学习爬虫,恰逢前几天网易云音乐的热评那么火,于是,就想着来把爬一爬网易云的热评。
本来是刚学习爬虫,想着用用requests库以及BeautifulSoup库来解析解析就差不多了。于是直接打开了网易云的歌手主页准备来分析分析它的页面结构。可是跟踪了一下流程才发现,并不是想象的那么简单。
这里写图片描述
可以看到,网易云音乐的热门歌手的信息是藏在一个post的请求里面,于是我想到了直接构造一个post的请求去获得有关热门歌手的信息,可是这爬完歌手后还要爬歌曲,爬完歌曲后才爬评论,这样一个个的去构造post的请求,显得有点傻。于是再转回去看了看通过get的请求,获得的实际页面
这里写图片描述
发现,所有的歌手都在一个id为g_iframe的iframe里面,而这里面,是一段加载的时候需要执行的很多js代码。嗯,这里,selenium这个库就其作用了,我们用这个库来模拟浏览器的操作,执行网页中的js代码,获得最终渲染的页面,然后来进行利用BeautifulSoup来进行解析,这样,流程就变的清晰起来了。
以爬取歌手为例

def SpiderForArtists():
    urllist='http://music.163.com/#/discover/artist'
    spider=webdriver.PhantomJS()
    spider.get(urllist)
    spider.switch_to_frame('g_iframe')
    allpage=BeautifulSoup(spider.page_source,'lxml')
    Hotmusicimg=allpage.select('#m-artist-box .u-cover-5 img')
    Hotmusica=allpage.select('#m-artist-box .u-cover-5 a')
    for i in range(10):
        title=Hotmusica[i].get('title')
        imglink=Hotmusicimg[i].get('src')
        artist="http://music.163.com/#"+Hotmusica[i].get('href').replace(' ','')

首先创建一个phantmjs的实例,并向“http://music.163.com/#/discover/artist”发出一个get的请求,然后,利用webdriver实例的swich_to_frame方法调到装有歌手信息的名为g_iframe的iframe中,动态执行其中的js代码。
然后新建一个BeautifulSoup实例,并获取上面执行js代码后的页面,再进行相应的解析。这里解析页面用的是css selector,为了节约时间,我就爬了10个歌手的信息。
之后,爬完歌手信息后会获得相应歌手主页的url,然后利用类似的方法去爬取相应歌手的歌曲信息。
最后,利用获得的歌曲信息进入歌曲主页,爬掉精彩评论并进行保存,整个流程就结束了。
我最终的爬取结果是这样的
这里写图片描述

整体流程就是这样,也没多大技术含量,写写玩玩吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值