使用scrapy创建一个项目爬取网易云音乐的所有歌手的相关资料
1、创建一个项目
- scrapy startproject 项目名称
我的项目叫Neteasy_music,所以命令是scrapy startproject Neteasy_music
2、创建一个爬虫
先把目录切换到项目里面
- cd 项目名称
- scrapy genspider 爬虫名字 网站地址
我这里取的名字是neteasy_music,爬取的网页是music.163.com/discover/artist,
所以命令是scrapy genspider neteasy_music music.163.com/discover/artist
3、编写爬虫文件
# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Requestfrom Neteasy_music.items import SingerItemclass NeteasyMusicSpider(scrapy.Spider):name = 'neteasy_music'allowed_domains = ['music.163.com']start_urls = ['https://music.163.com/discover/artist']base_url = 'https://music.163.com'def parse(self, response):# 获取歌手分类链接:如华语男歌手、欧美女歌手的链接singer_type_href = response.xpath('//a[@class="cat-flag"]/@href').extract()del singer_type_href[0] # 删除推荐歌手for url in singer_type_href:full_url = self.base_url + url# print(url)yield Request(url=full_url, callback=self.parseDetail, encoding='utf-8')def parseDetail(self, response):# 获取按字母排序歌手名字的列表页链接singer_initial_url = response.xpath('//ul[@id="initial-selector"]/li[position()>1]/a/@href').extract()for url in singer_initial_url:full_url = self.base_url + urlyield Request(url=full_url, callback=self.parseDetail1, encoding='utf-8')def parseDetail1(self, response):# 获取歌手的详情页的链接singer_list_href = response.xpath('//div[@class="m-sgerlist"]/ul/li/div/a/@href').extract()for url in singer_list_href:full_url = self.base_url + urlyield Request(url=full_url, callback=self.parseDetail2, encoding='utf-8')def parseDetail2(self, response):item = SingerItem()# 歌手姓名item['name'] = response.xpath('//h2[@id="artist-name"]/text()').extract_first()# 歌手图片item['pic'] = response.xpath('//div[@class="n-artist f-cb"]/img/@src').extract_first()# 获取歌手介绍连接sing_desc_href = response.xpath('//ul[@id="m_tabs"]/li[last()]/a/@href').extract_first()full_url = self.base_url + sing_desc_hrefyield Request(url=full_url, callback=self.parseDetail3, encoding='utf-8', meta={'data': item})def parseDetail3(self, response):item = response.meta['data']# 歌手简介singer_desc = response.xpath('//div[@class="n-artdesc"]/p/text()').extract_first()try:item['singer_desc'] = singer_descexcept:item['singer_desc'] = ''# print(item)yield item
4、编写字段文件
import scrapyclass SingerItem(scrapy.Item):# define the fields for your item here like:#歌手名字name = scrapy.Field()# 歌手图片pic = scrapy.Field()# 歌手简介singer_desc = scrapy.Field()
5、编写保存到数据库的文件
# -*- coding: utf-8 -*-# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import pymongoclass NeteasyMusicPipeline(object):def __init__(self, mongo_uri, mongo_db):self.mongo_uri = mongo_uriself.mongo_db = mongo_db# from_crawler用于实例化某个对象(中间件,模块),常常出现在对象的初始化,负责提供crawler.settings@classmethoddef from_crawler(cls, crawler):return cls(mongo_uri=crawler.settings.get('MONGO_URI'),mongo_db=crawler.settings.get('MONGO_DATABASE', 'items'))# 当spider被开启时,这个方法被调用def open_spider(self, spider):self.client = pymongo.MongoClient(self.mongo_uri)self.db = self.client[self.mongo_db]# 当spider被关闭时,这个方法被调用def close_spider(self, spider):self.client.close()# '''# 每个item pipeline组件都需要调用该方法,这个方法必须返回一个 Item (或任何继承类)对象, 或是抛出 DropItem 异常,被丢弃的item将不会被之后的pipeline组件所处理。## 参数:# item (Item 对象) – 被爬取的item# spider (Spider 对象) – 爬取该item的spider## '''def process_item(self, item, spider):collection_name = item.__class__.__name__self.db[collection_name].insert(dict(item))return item
6、修改设置文件
上图是设置user_agent,还有爬虫协议,这里是选择不遵守
上图是设置request_headers
上图是设置item_pipelines,作用是调用之前写的保存到数据库的文件
7、启动爬虫
编写main文件可以不用在命令行中输入
from scrapy import cmdlinecmdline.execute('scrapy crawl neteasy_music --nolog'.split())
然后启动它,run 'main'
或者在命令行中,把路径切换到项目路径,然后输入
scrapy crawl neteasy_music
这个代码就是启动爬虫了,如果后面加上--nolog就是运行时不输出日志。
启动并运行完成之后,在数据库中就可以看到这些数据了
使用scrapy创建一个项目爬取网易云音乐的所有歌手的相关资料相关推荐
- python爬取网易云音乐飙升榜音乐_python爬取网易云音乐热歌榜 python爬取网易云音乐热歌榜实例代码...
想了解python爬取网易云音乐热歌榜实例代码的相关内容吗,FXL在本文为您仔细讲解python爬取网易云音乐热歌榜的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:python,网易热歌榜 ...
- Python Scrapy 多线程爬取网易云音乐热门歌单信息(手把手教学)
下面我将向大家介绍使用 Scrapy 爬虫获取 网易云音乐 的热门歌单信息. 这里是网易云音乐的歌单页面,可以看到歌单信息非常得结构化,是非常适合爬虫来爬取的. URL:全部歌单 - 歌单 - 网易云 ...
- 使用Selenium爬取网易云音乐的所有排行榜歌曲
项目目标: 获取到一些简单的信息,排名,歌曲名称,时长,歌手,并且将歌曲下载下来 抓取分析: 在开始爬取之前需要确保已经安装好selenium,requests,lxml库,通过页面分析得到排行榜榜单 ...
- 使用Puppeteer轻松爬取网易云音乐、QQ音乐的精品歌单
背景 最近在学习Puppeteer进行自动化操作,另一方面为了防止上班时间被打扰,是时候爬点歌单在上班的时候,用来抵抗外界的干扰了. 地址 项目完整代码地址:github.com/BingKui/We ...
- python3之Scrapy+Selenium切换iframe抓取网易云音乐排行榜
Scrapy+Selenium切换iframe抓取网易云音乐排行榜 iframe标签 Selenium (WEB自动化工具) Scrapy 框架 iframe标签 了解一下iframe 百度百科介绍的 ...
- Selenium爬取网易云音乐评论
Selenium爬取网易云音乐评论 一.爬取工具 1.1 selenium selenium这是一个第三方库我们可以通过 pip install selenium来安装这个第三方库. Sele ...
- golang+es 爬取网易云音乐评论
目的和准备 目的: 为了知道自己歌单中每首歌的评论,然后通过歌曲id来检索这首歌的所有评论,并且想熟悉运用golang中的channel以及整个爬虫架构 准备: 语言:golang 编辑器: gola ...
- golang+es爬取网易云音乐评论
目的和准备 目的: 为了知道自己歌单中每首歌的评论,然后通过歌曲id来检索这首歌的所有评论,并且想熟悉运用golang中的channel以及整个爬虫架构 准备: 语言:golang 编辑器: gola ...
- python爬取网易云歌单_详解python selenium 爬取网易云音乐歌单名
目标网站: 首先获取第一页的数据,这里关键要切换到iframe里 打印一下 获取剩下的页数,这里在点击下一页之前需要设置一个延迟,不然会报错. 结果: 一共37页,爬取完毕后关闭浏览器 完整代码: u ...
最新文章
- 《BI项目笔记》基于雪花模型的维度设计
- 平台积分体系设计方案
- 如果java使用什么声明类_如果声明一个类时使用abstract修饰符,则表明该类是()_学小易找答案...
- Ubuntu -- 安装、卸载程序的命令
- Java多线程面试问题
- 解决Dev c++不能调试问题
- find a ubuntu featue
- HDOJ 1394 Minimum Inversion Number(线段树求逆序数对)
- 【R语言】如何直接调取Wind、iFinD数据接口教程
- 计算机桌面颜色如何设置标准,电脑桌面背景字体颜色设置小技巧
- LPRNet车牌识别算法?其实没有想象那么难
- Hugging Face:成为机器学习界的“GitHub”
- Mac上如何修改itunes的默认备份地址
- Android锁屏下弹窗的尝试,android开发实战我的云音乐
- html5中figure怎么用,HTML5中figure和figcaption标签用法
- Java 数组和List的使用
- 最新ThinkPHP微信独立精彩互换抢红包系统源码开源版
- 马化腾徐少春等中国富豪获住房补贴 政策真空网民质疑
- blender的一些使用
- 简单网店php,Php免费商城系统让你白手起家开网店