Scrapy爬取网易云音乐和评论(二、Scrapy框架每个模块的作用)

目录:

1、Scrapy爬取网易云音乐和评论(一、思路分析)
2、Scrapy爬取网易云音乐和评论(二、Scrapy框架每个模块的作用)
3、Scrapy爬取网易云音乐和评论(三、爬取歌手)
4、Scrapy爬取网易云音乐和评论(四、关于API)
5、Scrapy爬取网易云音乐和评论(五、评论)

关于如何建立一个scrapy程序,可以参考这两篇文章:

1、http://cuiqingcai.com/3472.html(创建的时候推荐)
2、http://www.cnblogs.com/wuxl360/p/5567631.html

关于使用mongodb,可以参考:

1、http://www.jianshu.com/p/30408d8ad1c0

一、建立的命令:

scrapy startproject + 你的项目名        

第一篇文章有提到两个比较特别且有用的地方:

1、
entrypoint.py

解释一下:execute里面的三个字符串连起来它其实就是最后执行scrapy程序的命令。这个文件的好处是,倘若你在使用编辑器,比如sublime,是可以在配置后直接执行的,而不用打开DOS窗口然后执行,如果你在sublime里直接执行scrapy本身的任何一个文件,它都不会执行成功,而只能执行这个entrypoint.py,名字应该随意吧,无所谓。

另一点请参考以下的第三部分

二、框架结构

现在整个框架的结构是这样的:


项目结构

当然,这个spiders文件夹下的WangYiYun.py并不是自动生成的,这个需要我们自己建立,这个文件就是主爬虫程序。

另外,这个脚本的名字建议不要取和项目名同名,否则后面可能会踩坑。以下简称WYY.py,省得出错,我因为已经生成了,改了别的地方又会出错,解决办法是在代码的最前面,编码注释的后面加上这么一句(参考链接找不到了,但是参考GitHub的链接代码里也有):

from __future__ import absolute_import
  • entrypoint.py:执行程序,就想象是run/python xx.py
  • items.py:如果你学过orm的话,会很好的理解它,它相当于数据库的字段。
  • middlewares.py:这个是个中间件,我也不知道它是做什么的,因为并没有用到。且很多例子上显示的结构没有它,基本上我们也不会改到它。
  • pipelines.py:这个就是定义存储的文件,比如连接,使用哪个数据库存储。
  • settings.py:一看就知道,是配置文件。

三、关于setting配置:

1、关于调试

上面的原因和配置解释的很清楚,


来自http://cuiqingcai.com/3472.html

2、关于spidername和robots.txt

spidername and robots.txt

BOT_NAME很重要,在WYY.py文件里写脚本的时候,继承自scrapy.Spider的这个类,它需要有一个name,而这两者必须同名。

spidername

最下面那行的ROBOTSTXT_OBEY,大家知道爬虫绕不开robots.txt这个文件,每个网站都会有这个网站,是必须遵守的一个守则吧,就是有些不让你爬,有些又允许你爬。默认是True,如果失败了,可以尝试将其注释,然后复制一行,改为False。

settings.py文件里大多都是写好的,你只要将它复制,取消注释,然后修改即可,最好不要不复制直接在原文上改,万一改到了什么出了错,还能有个参照物。

3、关于headers

Headers

重要的一般就是Referer、User-Agent(这个必须要有)、Accept(可选,但是涉及到xhr,即json文件,就要修改了)。
这里将它注释,改成自己的,你也可以写在主爬虫WYY.py文件里另写,比较自由,写在这里算是一个基本配置吧。

4、关于ITEM_PIPELINES

ITEM_PIPELINES

这个是启用一个Item Pipeline组件,数字代表优先级,越小越优先,没有注释的那行是我的,而下面还有一行,是我之前在网上看过的一种写法,但是并不能成功,它应当是一个字典,列表不行

5、关于mongodb配置
随便写在哪,我们就写在刚刚ITEM_PIPELINES的后面

mongodb

这里顺便建议,常量都用大写。
HOST是本地,PORT是端口,DBNAME是数据库,WYY。
接下来四个是集合了,相当于table,这个顺序是倒序。

1、MONGODB_COL_ARTIST - > ArtistInfo -> 所有的歌手列表
2、MONGODB_COL_ALBUMLIST - >AlbumListInfo - > 每个歌手的所有专辑列表
3、MONGODB_COL_ALBUM - >AlbumInfo - > 每张专辑内的所有歌曲列表
4、MONGODB_COL_SONG - > SongInfo -> 每首歌曲的信息

四、关于items.py

它就相当于SQL/MySQL里的字段,它没有什么特别的字段类型,反正所有都是scrapy.Field()就可以了,另外三个集合同样,每个单独写个类,依照你们自己的需求定字段即可。

items.py

五、关于pinelines.py

pinelines.py

切记,要记得导入items里的那几个你定义的字段的类,我之前忘了导入,然后一切程序正常,就死活存不进去,也不报错,差点掉坑里走不出来

然后这个WangyiyunPipeline基本就两块,一个初始化init(),一个process_item(),前者是用来连接的,后者是用来存储的。

可以看到我init里有一些注释,这里说明一下,因为涉及到多个集合存储,一开始真不知道怎么弄,一开始我以为把每个都扔init就成了,然后通过self调用,后来发现不行,在init定义一个集合就可以了。process_item()还是参考刚刚那个GitHub那个项目,才知道通过isinstance判断。

pinelines.py -> process_item()

isinstance大家知道什么意思吧,然后每个item对应的什么在注释我也写了。另外,我下面还有一些被注释掉的代码部分,这里就是我在最开头说的,想要跳过一些重复的地方,但是跳过之后不知道做什么处理。

在不用框架的时候,我们存Mongodb。是先定义一个空字典,然后赋值,最后insert_many/insert_one,这里也是一样的,只不过,我们是将传入的item给dict化。

而后面,在不使用默认的集合时,重新赋一个取代之前的artist即可。

接下来我们开始正式写代码了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容

  • scrapy学习笔记(有示例版) 我的博客 scrapy学习笔记1.使用scrapy1.1创建工程1.2创建爬虫模...
    陈思煜阅读 12,644评论 4 46
  • Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化...
    Evtion阅读 5,820评论 12 18
  • 序言第1章 Scrapy介绍第2章 理解HTML和XPath第3章 爬虫基础 第4章 从Scrapy到移动应用第5...
    SeanCheney阅读 5,356评论 4 10
  • 写得很草,连形容词也从脑子里挖不出来了。(困死我了m(._.)m) 以下,前提以“凯特”为绝对主角不动摇,以她的内...
    石头Q晴阅读 921评论 0 0
  • JOIN: 如果表中有至少一个匹配,则返回行 LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行 RI...
    pingink阅读 492评论 0 0