2018-12-04:虾米网不知道什么时候更新了新版本,目前还保留旧版本的模板,不排除后续官方直接下架旧版模板。
新版本截图
接上一章最后说的,本篇文章讲解目标页的xpath,以及歌手专辑页面的内容采集。
随便进入一个歌手的某首歌曲页面,比如夜空中最亮的星
虾米网歌曲页面分析:
1.歌曲标题是固定死的,倒不是必须写判断,不过为了代码的健壮性。
2.不爬取专辑图。
3.所属专辑以及演唱者,下面的作词作曲编曲以及歌词,不会出现在纯音乐当中,所以写代码的时候,需要注意判断。
https://www.xiami.com/song/1770201852,是夜空中最亮的星的url。
接下去分析想要爬取得内容的xpath, 旧版本下,标题
标题存在div class=song-view → div class=view-body → div class=song-name 下,
打开dos命令,输入scrapy shell https://www.xiami.com/song/1770201852
直接输入:
response.xpath('//div[@class="view-body"]//div[@class="song-name"]/text()').extract()[0]
(该xpath其实不严谨,需要修改如下)
title =response.xpath('//div[@class="view-body"]//div[@class="song-name"]/text()')
title = '' if not title else title.extract()[0]
spiders→xiami.py 中的实际部分代码如下,
def parse_detail(self, response):
item = XiamiuserItem()
# 考虑到最终单曲页面,比如说那些纯音乐的可能就只有专辑和歌手,所以重新写。
# 单曲页面单曲标题
title = response.xpath('//div[@id="title"]/h1/text()')
item['title'] = '' if not title else title.extract()[0]
#为什么要带[0],自己删掉试试
…此处省略…
yield item
关于其他的XPATH匹配方法,可参考下面两个地址:
xpath定位方式实例
使用Xpath定位元素(和元素定位相关的Xpath语法)
写两个DIV,目的是为了保证唯一匹配,毕竟有些html、div标签的id 或者class,写的是重复的。
因为部分歌曲页面,可能不会出现作曲、作词、编曲。
我的想法是,先xpath获取到<div class="infos">****</div>,这块代码中的内容,包含作曲、作词、编曲等信息,如果有就有,没有就没有,if判断也不用以全部内容为基准。
2018-12-14,先暂时写一个title的 xpath的匹配规则。
这里说一个小秘密,慕课网的scrapy 分布式爬虫实战教程,关于xpath方法,以及关于爬取下一页之类的知识,讲的很详细,大家可以去买来看看。至于说,买的是不是正版,就不管我事了。23333,反正原作者也没给我广告费。
网友评论