| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> Python Scrapy 多线程爬取网易云音乐热门歌单信息(手把手教学) -> 正文阅读 |
|
[Python知识库]Python Scrapy 多线程爬取网易云音乐热门歌单信息(手把手教学) |
下面我将向大家介绍使用 Scrapy 爬虫获取 网易云音乐 的热门歌单信息。 这里是网易云音乐的歌单页面,可以看到歌单信息非常得结构化,是非常适合爬虫来爬取的。 URL:全部歌单 - 歌单 - 网易云音乐 (163.com) ? 爬取结果预览(爬取时间提早于写这篇文章时间约一周,所以歌单信息部分有变化): 一、首先来看一下Scrapy的组成:Scrapy框架主要由五大组件组成,它们分别是调度器(Scheduler)、下载器(Downloader)、爬虫(Spider)和实体管道(Item Pipeline)、Scrapy引擎(Scrapy Engine)。下面我们分别介绍各个组件的作用。 (1)、调度器(Scheduler): 调度器,说白了把它假设成为一个URL(抓取网页的网址或者说是链接)的优先队列,由它来决定下一个要抓取的网址是 什么,同时去除重复的网址(不做无用功)。用户可以自己的需求定制调度器。 (2)、下载器(Downloader): 下载器,是所有组件中负担最大的,它用于高速地下载网络上的资源。Scrapy的下载器代码不会太复杂,但效率高,主要的原因是Scrapy下载器是建立在twisted这个高效的异步模型上的(其实整个框架都在建立在这个模型上的)。 (3)、 爬虫(Spider): 爬虫,是用户最关心的部份。用户定制自己的爬虫(通过定制正则表达式等语法),用于从特定的网页中提取自己需要的信息,即所谓的实体(Item)。 用户也可以从中提取出链接,让Scrapy继续抓取下一个页面。 (4)、 实体管道(Item Pipeline): 实体管道,用于处理爬虫(spider)提取的实体。主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。 (5)、Scrapy引擎(Scrapy Engine): Scrapy引擎是整个框架的核心.它用来控制调试器、下载器、爬虫。实际上,引擎相当于计算机的CPU,它控制着整个流程。 ?重点:一个Scrapy项目的文件目录结构如下: 我们需要编辑的一般只有 spiders 、items.py、 pipeline.py、settings.py 在桌面新建一个项目文件夹,然后使用pycharm打开,在终端(Terminal)中输入: scrapy startproject 爬虫项目名称? ? ? ?#创建一个Scrapy爬虫项目 cd my 爬虫项目名称? ? ? ? ? ? ? ? ? ? ? ? ? #进入到此项目中 如本文是: scrapy startproject wyyMusic cd?wyyMusic 这样一个网易云音乐爬虫项目就创建好了。 二、编写具体爬虫代码1. 设置settings.py? 在settings.py中写上一下代码:(用于设置爬虫的一些全局配置信息)
2. 设置items.py:(定义需要爬取的字段)
3. 创建歌单爬虫 MusicList.py: 在spiders包下新建一个?MusicList.py,创建后的目录结构如下 在MusicList.py中获取歌单信息
?每一页的每一个歌单,都对应一个 li 标签,li标签中的a标签就是歌单详细页面的地址 ?进入到一个歌单的详细信息页面: ?我们爬取的信息就是上图中画红框的地方,它们对应的字段名为: SongsListID = scrapy.Field() #歌单id号 SongListName = scrapy.Field() #歌单名 AmountOfPlay = scrapy.Field() #播放量 Labels = scrapy.Field() #标签名 Url = scrapy.Field() #歌单域名,为下一次详细爬取留备份 Collection = scrapy.Field() #歌单收藏量 Forwarding = scrapy.Field() #转发量 Comment = scrapy.Field() #评论量 NumberOfSongs = scrapy.Field() #歌曲数量 CreationDate = scrapy.Field() #歌单创建日期 AuthorID = scrapy.Field() #作者id 它们都是在? SongsListPageParse 函数中,通过解析歌单详细信息页面的来获取。 爬取下一页: ? ?获取下一页的方法有两种: 一是从 每页的“下一页” a标签中获取下一页的url地址 二是根据翻页的规律,每页的url中的offset参数相差35(即每页有35个歌单),因此只要令?offset+= 35 进行循环就可以一直爬取到下一页,直到 offset <= 35 * 37 为止,37是有37页。 其实每次 ,所以在爬取下一页的时候没有用for ,而只是用 if 来判断offset yield scrapy.Request(nextpage_a_url, callback=self.parse) 其实就是一个递归,调用parse函数自身。 由于第二种方法更为简便,所以这里使用的第二种方法来爬取下一页 4. 设置pipelines.py 来保存获取到的信息(即item)
5.终于到了激动人心的时刻!—— 启动爬虫 在终端(Terminal)中输入: scrapy crawl MusicList (注意:在此之前要保证是在wyyMusic爬虫目录下,若不在,则可以通过 cd?wyyMusic 来进入到爬虫目录下。) 已经在开始爬取了!过一会儿会自动在wyyMusic 包下生成MusicList.csv 文件,里面存放的就是爬取到的并整理好的全部热门歌单信息。 最终爬取到了1288个歌单,效果如下: ? 最后: 网易云音乐中有些页面的信息无法使用Scrapy来爬取,表现为爬取到的内容为空。这时候就需要使用python Selenium爬虫来爬取,下篇文章将教小伙伴们使用Selenium爬虫来爬取网易云音乐用户页面详细信息,如用户昵称、性别、vip等级、所在地、简介、收藏与创建的歌单歌曲、粉丝等等信息。 期待的小伙伴不妨加个关注、点个赞,创作不易 ? ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 3:19:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |