网络爬虫实践(一)-虾米精选集及歌曲

本文介绍了如何使用Python进行网络爬虫,以抓取虾米音乐用户精选集及其歌曲列表。首先,通过设置User-Agent避免服务器限制,然后利用正则表达式匹配网页内容,提取精选集名称和ID。接着,遍历分页URL,通过正则表达式找出所有页码,进而遍历所有页面。最后,解析每个精选集的URL,获取歌曲信息。代码示例展示了具体的实现过程。
摘要由CSDN通过智能技术生成

需求

1、抓取虾米用户的精选集,及各精选集下的歌曲列表
2、将抓取到的数据存储至文件

思路

1、抓取页面内容
2、正则表达式匹配字符串,并返回匹配信息
3、遍历所有页面

具体实现

一、抓取页面内容

urllib2是接受url请求的模块。导入扩展包后,使用request()方法,给服务器发送Http请求。调用urlopen()方法打开url:

url = "http://www.xiami.com/space/collect/u/3735910/order/1/p/1/page/"  
req = urllib2.Request(url)  
respone = urllib2.urlopen(req)

运行程序后,服务器返回信息:

urllib2.HTTPError: HTTP Error 400: Bad Request  

服务器拒绝访问,说明虾米服务器做了防止程序访问的措施,解决方法是:让服务器“以为”是浏览器在访问它--加入浏览器访问时的标志:User-Agent。我们在创建请求对象时,加入头数据。浏览器正常响应后,可抓取网页内容:

req = urllib2.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like   Gecko) Chrome/28.0.1500.72 Safari/537.36')
respone = urllib2.urlopen(req)
mainpage = respone.read()

将服务器返回信息保存到文件中并打开,可以看到网页源代码(不要用记事本打开,可使用sublime等文本编辑器)。

二、正则表达式匹配字符串,并返回匹配信息

打印出抓取到的页面内容,或使用浏览器的查看网页源代码功能,可看到内容的实质是网页的源代码,其实也就是字符串。想要获取字符串中的精选集名称和歌曲名称,只要使用正则表达式进行匹配就好了。

<p class="cover"><span><a title="欧美流行" href="/collect/42347935"><img alt="欧美流行" src="http://img.xiami.net/res/img/default/cd100.gif"/></a></span></p>

提取精选集名称(“欧美流行”),精选集的id(42347935)等信息的匹配表达式

<p class="cover"><span><a title="(.+)"\s*href=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
xiami-tools 是虾米工具包更新[2015/1/30] 初始化Xiami类时可以加入captcha_handler指定验证码处理函数,该函数需要返回验证码,交互和显示都用户实现的函数内自行处理[2014/8/12] 1.替换掉android接口中[2014/8/2] 增加虾米的淘宝帐号登录. 调用方法 Xiami(username, password, taobao=True). 以及用 cookies 登录的办法 (解决接口不能用的终极方案) Xiami(username, password, cookies=COOKIES字典)提示想要下载自己的收藏歌曲列表登录后比未登录获取的速度快 (接口不同)把虾米的一些接口做成了库方便其他程序调用Xiami.get_stared_song(self, uid=None, full=False) 返回某用户所有收藏曲目列表, uid不写默认为登录用户.Xiami.get_stared_collection(self, uid=None, full=False) 返回某用户所有收藏精选集列表, uid不写默认为登录用户.Xiami.get_stared_album(self, uid=None, full=False) 返回某用户所有收藏专集列表, uid不写默认为登录用户.Xiami.set_320k() 设置当前用户默认下载曲目为高音质Xiami.download_song(self, song_id) 返回编号为 song_id 的曲目的相关信息和下载地址, 详细返回请看范例Xiami.download_album(self, album_id) 返回编号为 album_id 的专辑的相关信息和专辑内曲目下载地址, 详细返回请看范例Xiami.download_playlist(self, col_id) 同上Xiami.star_song(self, songid) 收藏曲目编号为 songid 的歌曲Xiami.get_session(self) 获得当前 Xiami 实例的requests.Session对象Xiami.get_random_songs(self, uid=None, full=False) 不知道干什么用的Xiami.get_artist_topsongs(self, artist_id, full=False) 获得艺术家最热门的一些曲目Xiami.get_artist_albums(self, artist_id, full=False) 获得艺术家的专辑列表get_ 类的函数可以指定 full 参数来确定是否返回详细信息 download_ 类的函数返回一个简略但是足够信息的曲目列表注意 慎用 full 参数, 对于vip会员来说, full 参数可能查询高清音质的地址速度过快而导致需要输入验证码 (当然你可以直接指定你自己喜欢的处理函数 self.captcha_handler = Your handler of captcha 解决这个问题) 标签:xiami

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值