livandata
数据EDTA创始人,没有之一
现担任数据EDTA个人公众号董事长兼CEO兼财务兼创作人
口号是:让大数据赋能每一个人。
前 言
自从上次出了两篇爬虫的文章后,很多人私信我说爬虫技术还是比较系统的,如果只用上文的一些技能很难爬取大规模的网站,是否会有一些架构之类的东东,java都有spring,为什么爬虫就没有,别着急,爬虫也是有的,只是我们平时没有深入探索,下面我们就了解一下爬虫的常规架构——scrapy。
scrapy是一个python爬虫架构,非常适合做一些大型爬虫项目,并且开发者利用这个架构,可以用不关注一些细节问题,现在爬虫的架构还是很多的,作为元老级别的scrapy依然是一个受到多方关注的技术。
scrapy的安装是一个比较繁琐的过程,大家可以百度一下最新的安装手册,此处笔者将当时用的一个安装方式跟大家分享一下,有问题不要喷我,主要是电脑已经安装过一次了,再搞一次怕环境卸载不干净,好在百度非常强大,足够解决安装问题:
在操作完上面的步骤后,再在 cmd 中输入:
scrapy startproject my_crawler
一个全新的scrapy框架即可创建成功。
是不是很简单?
此处你也可以体会python的优势,其他语言是很难想象会有如此效率的。
了解过django的大佬们估计也会有同样的感慨,太方便了~
我们先创建一个普通的爬虫
创建项目的命令为:
Scrapy genspider -t basic qsbk qiushibaike.com
项目创建完成后,我们会在指定的文件夹下看到一个全新的项目:
我们该怎么使用scrapy呢?
最直接的方式就是上代码,下面请欣赏案例《糗事百科》的爬取:
1)test文件:
2)item文件:
import scrapy
class MyCrawlerItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
pass
3)pipeline文件:
class MyCrawlerPipeline(object):
def process_item(self, item, spider):
for i in range(0, len(item["content"])):
print(item["content"][i])
print(item["link"][i])
return item
面对这个项目,不知大家有没有什么启发呢?
scrapy中存在较多的文件,这些文件之间有固定的执行顺序,而且文件之间会相互调用,清晰了这一点,我们就可以看scrapy的原理了。
scrapy原理
先上一个图吧:
scrapy 的常用命令
Scrapy 框架中有两个命令:
其一:为全局命令:
Fetch 命令:
功能是爬一个网页,主要参数为:-h;--nolog;
1)Scrapy fetch http://www.baidu.com :
爬取一个网页,包含爬取的过程。
2)Scrapy fetch https://www.baidu.com -–nolog
3)Runspider可以不依托 scrapy 项目独立运行爬虫文件。
Scrapy runspider test.py:
运行单独的一个不依托项目的爬虫文件。
4)Scrapy shell http://www.baidu.com –nolog :
爬取百度,并进入 shell 的交互终端。
其二为项目命令:
进入到项目中:Scrapy Bench:测试本地硬件的性能。
后续杂言
scrapy的架构还是很精深的,几乎涵盖了爬虫的所有内容,本文只做一个简单的介绍,有兴趣的同学,可以找到scrapy的官方文档,做深入了解
近期关于爬虫的新闻挺多的,笔者借这篇文章也表达一下自己对爬虫的看法,希望大家不喜勿喷:
1)爬虫是门技术,只是用来收集公开的数据,就像是之前商店里陈列的商品价格,爬虫只是替代了大家线下拿着笔去抄录的过程,对于网站上没有展示的内容或者网站名言说是不能获取的内容,爬虫是不能获取的,这是学习技术的一个基本线的问题。
2)爬虫是一门位于数据价值底层的技能,还是想劝一下大家不要过于沉迷爬虫,多利用技术探索数据本身的价值。