在系统学习Scrapy前我们首先在看一个实际的项目,从宏观上把握下Scrapy爬虫框架的流程(填空题训练开始了,小伙伴们准备好了吗?):
这里我选取了百度阅读,我们来爬取所有新书榜的书单包括其书名;评分;出版商;价格信息 /目标站点:https://yuedu.baidu.com/rank/newbook
具体流程:
(1)、创建项目 scrapy startproject + 项目名
(2)、定义spider(蜘蛛)scrapy genspider + 名称 +获取网站的主域名
这里我们创建了一个名为baidu_read的项目 并定义了名为book 的spider 主域名为yuedu.baidu.com
我们使用tree 命令查看目录树结构,如没安装,请小伙伴们终端键入sudo apt-get install tree 安装
我们可以看到系统已自动生成了整个框架(就像老师出好个填空题的题目,下面我们需要将文字填入空格来实现整个scrapy爬虫项目)
下面我们来分析下上面的各个文件是用来干嘛的?(这里不详谈,我们先来了解其重要组件即可,下面我会详细介绍)
下面是我的理解:
第一个:items.py--就是用来定义你要爬什么
第二个:middlewares.py--这相当于你的主机(客户端)与服务器中的墙(打个比方吧:你喜欢一个女生想了解她的信息,但你又不好意思直接去问,怎么办呢?这当然是找她的小伙伴帮你打听了呀,但这位小伙伴有权决定帮不帮你,她不帮你(比方用robots.txt爬虫协议限制你),然后一首凉凉送给你!这里这位小伙伴相当于这道墙,而你就是客户机,你的心上人当然是服务器了!do you understand?小伙伴们)
第三个:piplelines.py-就是用来对爬取的数据进行处理(包括清洗、去重、等等)
第四个:settings.py--项目的配置文件(这里就是小伙伴们启用各个组件的开关(我的理解))
第五个(主要):spiders下的 book.py这就是整个项目的核心,也是整个程序的核心,我们通过这个小蜘蛛来实现我们的目标(怎么爬?)
(3)、让我们开始填空:
first step :修改item.py如下:
second step:修改book.py如下:
修改过程中我们需要使用scrapy shell 进行调试
下面小伙伴们我们先来介绍下scrapy shell 的使用
首先:激活虚拟环境source course-python3.5-env/bin/activate
安装下ipython(python交互式环境包)使得我们的界面更美观
键入:scrapy shell https://yuedu.baidu.com/rank/newbook?pn=0(爬取该网站)
发现返回结果中没有response,这是为什么呢?
答:我们的爬虫去访问网站,首先会去访问网站的robots.txt(网络爬虫协议)从下面的百度阅读robot.txt我们可以看出处理像Baiduspider可以访问该网站,其他的不可以访问网站
User-agent: Baiduspider Disallow: /w? Disallow: /search? Disallow: /submit Disallow: /upload User-agent: Googlebot Disallow: /search? Disallow: /submit Disallow: /upload User-agent: MSNBot Disallow: /search? Disallow: /submit Disallow: /upload User-agent: Baiduspider-image Disallow: /search? Disallow: /submit Disallow: /upload User-agent: YoudaoBot Disallow: /search? Disallow: /submit Disallow: /upload User-agent: Sogou web spider Disallow: /search? Disallow: /submit Disallow: /upload User-agent: Sogou inst spider Disallow: /search? Disallow: /submit Disallow: /upload User-agent: Sogou spider2 Disallow: /search? Disallow: /submit Disallow: /upload User-agent: Sogou blog Disallow: /search? Disallow: /submit Disallow: /upload User-agent: Sogou News Spider Disallow: /search? Disallow: /submit Disallow: /upload User-agent: Sogou Orion spider Disallow: /search? Disallow: /submit Disallow: /upload User-agent: ChinasoSpider Disallow: /search? Disallow: /submit Disallow: /upload User-agent: Sosospider Disallow: /search? Disallow: /submit Disallow: /upload User-agent: yisouspider Disallow: /search? Disallow: /submit Disallow: /upload User-agent: EasouSpider Disallow: /search? Disallow: /submit Disallow: /upload User-agent: 360Spider Disallow: /search? Disallow: /submit Disallow: /upload User-agent: HaoSouSpider Disallow: /search? Disallow: /submit Disallow: /upload User-agent: Sogou Spider Disallow: /search? Disallow: /submit Disallow: /upload User-agent: * Disallow: /
针对这种情况我们怎么办呢?
1、更改settings.py 即不遵守robots.txt协议,这种方式会造成我们的ip被封,不建议使用 (将ROBOTSTXT_OBEY =False)
2、伪装浏览器进行爬取(USER_AGENT = 'Baiduspider')(推荐这种方式)
重新运行scrapy shell https://yuedu.baidu.com/rank/newbook?pn=0 ,这下我们成功爬取了该网站
更改book.py文件如下:
本部分的编写结合了scrapy shell 的测试,后面我们详解
最后运行爬虫如下:
可以看到我们的爬虫在运行
部分运行结果展示
总结:
我们使用了scrapy 中的iem.py / settings.py /spider.py 组件实现了一个简单的爬虫项目,小伙伴们对scrapy 框架的使用是否有了一个宏观的认识,我们再接再厉,马上开启进阶学习吧!