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创建一个项目爬取网易云音乐的所有歌手的相关资料相关推荐

  1. python爬取网易云音乐飙升榜音乐_python爬取网易云音乐热歌榜 python爬取网易云音乐热歌榜实例代码...

    想了解python爬取网易云音乐热歌榜实例代码的相关内容吗,FXL在本文为您仔细讲解python爬取网易云音乐热歌榜的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:python,网易热歌榜 ...

  2. Python Scrapy 多线程爬取网易云音乐热门歌单信息(手把手教学)

    下面我将向大家介绍使用 Scrapy 爬虫获取 网易云音乐 的热门歌单信息. 这里是网易云音乐的歌单页面,可以看到歌单信息非常得结构化,是非常适合爬虫来爬取的. URL:全部歌单 - 歌单 - 网易云 ...

  3. 使用Selenium爬取网易云音乐的所有排行榜歌曲

    项目目标: 获取到一些简单的信息,排名,歌曲名称,时长,歌手,并且将歌曲下载下来 抓取分析: 在开始爬取之前需要确保已经安装好selenium,requests,lxml库,通过页面分析得到排行榜榜单 ...

  4. 使用Puppeteer轻松爬取网易云音乐、QQ音乐的精品歌单

    背景 最近在学习Puppeteer进行自动化操作,另一方面为了防止上班时间被打扰,是时候爬点歌单在上班的时候,用来抵抗外界的干扰了. 地址 项目完整代码地址:github.com/BingKui/We ...

  5. python3之Scrapy+Selenium切换iframe抓取网易云音乐排行榜

    Scrapy+Selenium切换iframe抓取网易云音乐排行榜 iframe标签 Selenium (WEB自动化工具) Scrapy 框架 iframe标签 了解一下iframe 百度百科介绍的 ...

  6. Selenium爬取网易云音乐评论

    Selenium爬取网易云音乐评论 一.爬取工具 1.1 selenium ​ selenium这是一个第三方库我们可以通过 pip install selenium来安装这个第三方库. ​ Sele ...

  7. golang+es 爬取网易云音乐评论

    目的和准备 目的: 为了知道自己歌单中每首歌的评论,然后通过歌曲id来检索这首歌的所有评论,并且想熟悉运用golang中的channel以及整个爬虫架构 准备: 语言:golang 编辑器: gola ...

  8. golang+es爬取网易云音乐评论

    目的和准备 目的: 为了知道自己歌单中每首歌的评论,然后通过歌曲id来检索这首歌的所有评论,并且想熟悉运用golang中的channel以及整个爬虫架构 准备: 语言:golang 编辑器: gola ...

  9. python爬取网易云歌单_详解python selenium 爬取网易云音乐歌单名

    目标网站: 首先获取第一页的数据,这里关键要切换到iframe里 打印一下 获取剩下的页数,这里在点击下一页之前需要设置一个延迟,不然会报错. 结果: 一共37页,爬取完毕后关闭浏览器 完整代码: u ...

最新文章

  1. 《BI项目笔记》基于雪花模型的维度设计
  2. 平台积分体系设计方案
  3. 如果java使用什么声明类_如果声明一个类时使用abstract修饰符,则表明该类是()_学小易找答案...
  4. Ubuntu -- 安装、卸载程序的命令
  5. Java多线程面试问题
  6. 解决Dev c++不能调试问题
  7. find a ubuntu featue
  8. HDOJ 1394 Minimum Inversion Number(线段树求逆序数对)
  9. 【R语言】如何直接调取Wind、iFinD数据接口教程
  10. 计算机桌面颜色如何设置标准,电脑桌面背景字体颜色设置小技巧
  11. LPRNet车牌识别算法?其实没有想象那么难
  12. Hugging Face:成为机器学习界的“GitHub”
  13. Mac上如何修改itunes的默认备份地址
  14. Android锁屏下弹窗的尝试,android开发实战我的云音乐
  15. html5中figure怎么用,HTML5中figure和figcaption标签用法
  16. Java 数组和List的使用
  17. 最新ThinkPHP微信独立精彩互换抢红包系统源码开源版
  18. 马化腾徐少春等中国富豪获住房补贴 政策真空网民质疑
  19. blender的一些使用
  20. 简单网店php,Php免费商城系统让你白手起家开网店

热门文章

  1. pdf文件两栏内容提取信息思路
  2. html加入图片如何自动平铺,html怎么设置背景图片全屏平铺?
  3. JavaScript的表单验证
  4. oralc clob 解析内容
  5. 亮剑精神”之疯狂高考
  6. Linux编程:mktime通过时间获取时间戳
  7. 3.司马懿(长寿)、2.贾羽(善终)、1曹操(枭雄)
  8. 学生寝室电控系统的原理功能
  9. 程序员斗图专用表情包,做技术群里最靓的仔!
  10. Python——pymssql安装