大小:31 KB已被804人关注
python爬取网易云音乐评论是一个不错的学习资源,大小为31 KB,由班乐天 提供,python爬虫类资源中评分为8.9。
主要为大家详细介绍了python爬取网易云音乐评论,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
给大家精选了网上关于《python爬取网易云音乐评论》的学习笔记心得及相关实例内容,值得大家学习参考。
python爬虫之爬取百度音乐的实现方法
在上次的爬虫中,抓取的数据主要用到的是第三方的Beautifulsoup库,然后对每一个具体的数据在网页中的selecter来找到它,每一个类别便有一个select方法。对网页有过接触的都知道很多有用的数据都放在一个共同的父节点上,只是其子节点不同。在上次爬虫中,每一类数据都要从其父类(包括其父节点的父节点)上往下寻找ROI数据所在的子节点,这样就会使爬虫很臃肿,因为很多数据有相同的父节点,每次都要重复的找到这个父节点。这样的爬虫效率很低。
因此,笔者在上次的基础上,改进了一下爬取的策略,笔者以实例来描述。
如图,笔者此次爬取的是百度音乐的页面,所爬取的类容是上面榜单下的所有内容(歌曲名,歌手,排名)。如果按照上次的爬虫的方法便要写上三个select方法,分别抓取歌曲名,歌手,排名,但笔者观察得知这三项数据皆放在一个li标签内,如图:
这样我们是不是直接抓取ul标签,再分析其中的数据便可得到全部数据了?答案是,当然可以。
但Beaufulsoup不能直接提供这样的方法,但Python无所不能,python里面自带的re模块是我见过最迷人的模块之一。它能在字符串中找到我们让我们roi的区域,上述的li标签中包含了我们需要的歌曲名,歌手,排名数据,我们只需要在li标签中通过re.findall()方法,便可找到我们需要的数据。这样就能够大大提升我们爬虫的效率。
我们先来直接分析代码:
def parse_one_page(html): soup = BeautifulSoup(html, 'lxml') data = soup.select('div.ranklist-wrapper.clearfix div.bd ul.song-list li') pattern1 = re.compile(r'<li.*?<div class="index">(.*?)</div>.*?title="(.*?)".*?title="(.*?)".*?</li>', re.S) pattern2 = re.compile(r'<li.*?<div class="index">(.*?)</div>.*?title="(.*?)".*?target="_blank">(.*?)</a>', re.S) wants = [] for item in data: # print(item) final = re.findall(pattern1, str(item)) if len(final) == 1: # print(final[0]) wants.append(final[0]) else: other = re.findall(pattern2, str(item)) # print(other[0]) wants.append(other[0]) return wants
上面的代码是我分析网页数据的全部代码,这里不得不说python语言的魅力,数十行代码便能完成java100行的任务,C/C++1000行的任务。上述函数中,笔者首先通过Beautifulsoup得到该网页的源代码,再通过select()方法得到所有li标签中的数据。
到这里,这个爬虫便要进入到最重要的环节了,相信很多不懂re模块的童靴们有点慌张,在这里笔者真的是强烈推荐对python有兴趣的童靴们一定要学习这个非常重要的一环。首先,我们知道re的方法大多只针对string型数据,因此我们调用str()方法将每个list中的数据(即item)转换为string型。然后便是定义re的pattern了,这是个稍显复杂的东西,其中主要用到re.compile()函数得到要在string中配对的pattern,这里笔者便不累述了,感兴趣的童靴可以去网上查阅一下资料。
上述代码中,笔者写了两个pattern,因为百度音乐的网页里,li标签有两个结构,当用一个pattern在li中找不到数据时,便使用另一个pattern。关于re.findadd()方法,它会返回一个list,里面装着tuple,但其实我们知道我们找到的数据就是list[0],再将每个数据添加到另一个List中,让函数返回。
相信很多看到这里的小伙伴已经云里雾里,无奈笔者对re板块也知道的不多,对python感兴趣的同学可以查阅相关资料再来看一下代码,相信能够如鱼得水。
完整的代码如下:
import requests from bs4 import BeautifulSoup import re def get_one_page(url): wb_data = requests.get(url) wb_data.encoding = wb_data.apparent_encoding if wb_data.status_code == 200: return wb_data.text else: return None def parse_one_page(html): soup = BeautifulSoup(html, 'lxml') data = soup.select('div.ranklist-wrapper.clearfix div.bd ul.song-list li') pattern1 = re.compile(r'<li.*?<div class="index">(.*?)</div>.*?title="(.*?)".*?title="(.*?)".*?</li>', re.S) pattern2 = re.compile(r'<li.*?<div class="index">(.*?)</div>.*?title="(.*?)".*?target="_blank">(.*?)</a>', re.S) wants = [] for item in data: # print(item) final = re.findall(pattern1, str(item)) if len(final) == 1: # print(final[0]) wants.append(final[0]) else: other = re.findall(pattern2, str(item)) # print(other[0]) wants.append(other[0]) return wants if __name__ == '__main__': url = 'http://music.baidu.com/' html = get_one_page(url) data = parse_one_page(html) for item in data: dict = { '序列': item[0], '歌名': item[1], '歌手': item[2] } print(dict)
最后我们看到的输出结果如下:
好了,笔者今天就到这里了。希望喜欢python的萌新能够快速实现自己的spider,也希望一些大神们能够看到这篇文章时不吝赐教。
以上这篇python爬虫之爬取百度音乐的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。
上一篇:c语言项目开发实例
下一篇:没有了
展开 +
收起 -
实战Python网络爬虫 配套源码 从爬虫工具开发设计到动手做开发设计网络爬虫架构 从基本原理到实践活动,从入门到精通,受欢迎网络爬虫关键技术全把握 包含丰富多彩的爬虫工具、库、架构
立即下载这是一套通过实战教初学者学习采集数据、清洗和组织数据进行分析及可视化的Python读物。以Python爬虫技术应用实战为主,适合Python 初学者及高等院校的相关专业学生
立即下载做为这种方便快捷地搜集在网上信息内容并从这当中提取出能用信息内容的方法,网络爬虫技术性变得更加有效。应用Python那样的简易计算机语言,你能应用小量程序编写专业技能就能够抓取
立即下载精通Python网络爬虫 这是一本实战性的网络爬虫秘笈,不仅讲解了如何编写爬虫,而且还讲解了流行的网络爬虫的使用。 全书分为4个部分:第壹部分对网络爬虫做了概要性的介绍,主要介绍了
立即下载1.应用场景Python3.X解读,从新手入门到实战演练,全方位解读Python网络爬虫。 2.全书重难点附送微课解读,书网结合互动学习。 3.实例丰富多彩,高度重视实践活动,主要塑造用户的具体应用工
立即下载这本书讲解了如何使用Python编写网络爬虫程序获取互联网上的大数据,包含基础部分、进阶部分和项目实践三个部分,能带领读者从入门到进阶,再到实战,一步步了解爬虫,终写出自己的爬虫程序,欢迎下载
立即下载urllib模块发起的POST请求 案例:爬取百度翻译的翻译结果 1.通过浏览器捉包工具,找到POST请求的url 针对ajax页面请求的所对应url获取,需要用到浏览器的捉包工具。查看百度翻译针对某个字条发送ajax请求,所对应的url 点击clear按钮可以把抓包工具,所抓到请求清空 然后填上翻译字条发送ajax请求,红色框住的都是发送的ajax请求 抓包工具All按钮代表 显示抓到的所有请求 ,包括GET、POST请求 、基于ajax的POST请求 XHR代表 只显示抓到的基于ajax的POST请求 哪个才是我们所要的基于ajax的POST请求,这个POST请求是携带翻译字条的苹果请求参数 再看看这个POST请求 对应的请求URL ,这个URL是我们要请求的URL 发起POST请求……
宫锐精
Copyright 2018-2021 www.xz577.com 码农之家
版权投诉 / 书籍推广 / 赞助:520161757@qq.com
python爬虫神器Pyppeteer入门及使用
前言 提起selenium想必大家都不陌生,作为一款知名的Web自动化测试框架,selenium支持多款主流浏览器,提供了功能丰富的API接口,经常被我们用作爬虫工具来使用。但是selenium的缺点也很明显,比如速度太慢、对版本配置要求严苛,最麻烦是经常要更新对应的驱动。 今天就给大家介绍另一款web自动化测试工具Pyppeteer,虽然支持的浏览器比较单一,但在安装配置的便利性和运行效率方面都要远胜selenium。 01.Pyppeteer简介 介绍Pyppeteer之前先说一下Puppeteer,Puppeteer是谷歌出品的一款基于Node.js开发的一款工具,主要是用来操纵Chrome浏览器的 API,通过Javascript代码来操纵Chrome浏览器,完成数据爬取、Web程序自动测试……