scrapy爬虫案例_Python爬虫架构之scrapy重现江湖!

3c2004b7150a4f9ed44e05fa837735d6.gif

前 言

bb560a317e6e9e69aa5ffc50241ab7d6.png

自从上次出了两篇爬虫的文章后,很多人私信我说爬虫技术还是比较系统的,如果只用上文的一些技能很难爬取大规模的网站,是否会有一些架构之类的东东,java都有spring,为什么爬虫就没有,别着急,爬虫也是有的,只是我们平时没有深入探索,下面我们就了解一下爬虫的常规架构——scrapy。

scrapy是一个python爬虫架构,非常适合做一些大型爬虫项目,并且开发者利用这个架构,可以用不关注一些细节问题,现在爬虫的架构还是很多的,作为元老级别的scrapy依然是一个受到多方关注的技术。

scrapy的安装是一个比较繁琐的过程,大家可以百度一下最新的安装手册,此处笔者将当时用的一个安装方式跟大家分享一下,有问题不要喷我,主要是电脑已经安装过一次了,再搞一次怕环境卸载不干净,好在百度非常强大,足够解决安装问题:

321db54c3926f694ce9766c483590df4.png

bb560a317e6e9e69aa5ffc50241ab7d6.png

在操作完上面的步骤后,再在 cmd 中输入:

scrapy startproject my_crawler

一个全新的scrapy框架即可创建成功。

是不是很简单?

此处你也可以体会python的优势,其他语言是很难想象会有如此效率的。

了解过django的大佬们估计也会有同样的感慨,太方便了~

3c2004b7150a4f9ed44e05fa837735d6.gif

我们先创建一个普通的爬虫

创建项目的命令为:

Scrapy genspider -t basic qsbk qiushibaike.com

项目创建完成后,我们会在指定的文件夹下看到一个全新的项目:

ac60cb226ee4fd376c840b0a498e021d.png

我们该怎么使用scrapy呢?

最直接的方式就是上代码,下面请欣赏案例《糗事百科》的爬取:

1)test文件:

#!/usr/bin/env python# _*_ UTF-8 _*_# author:livanimport scrapyfrom my_crawler.items import MyCrawlerItemfrom scrapy.http import Requestclass TestSpider(scrapy.Spider):    name = "test"    allowed_domains = ["qiushibaike.com"]    # start_urls = ['http://qiushibaike.com/']    #对 request 内容进行设置    def start_requests(self):        ua = {"User_Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64;rv:53.0) Gecko/20100101 Firefox/53.0"}        yield Request('http://www.qiushibaike.com/', headers=ua)    def parse(self, response):        it = MyCrawlerItem()        it["content"]=response.xpath("//div[@class='content']/span/text()").extract()        it["link"] = response.xpath("//a[@class='contentHerf']").extract()        yield it

2)item文件:

import scrapyclass 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原理

bb560a317e6e9e69aa5ffc50241ab7d6.png

先上一个图吧:

b38700217f361cbea386521db550e0f8.png

这个图是被广为流传的图,成为学习scrapy的基本架构图,我们可以做一些简单的介绍:

(1)、调度器(Scheduler):

调度器,说白了把它假设成为一个URL(抓取网页的网址或者说是链接)的优先队列,由它来决定下一个要抓取的网址是 什么,同时去除重复的网址(不做无用功)。用户可以自己的需求定制调度器。

(2)、下载器(Downloader):

下载器,是所有组件中负担最大的,它用于高速地下载网络上的资源。Scrapy的下载器代码不会太复杂,但效率高,主 要的原因是Scrapy下载器是建立在twisted这个高效的异步模型上的(其实整个框架都在建立在这个模型上的)。

(3)、 爬虫(Spider):

爬虫,是用户最关心的部分。用户定制自己的爬虫,用于从特定的网页中提取自己需要的信息,即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面。

(4)、 实体管道(Item Pipeline):

实体管道,用于处理爬虫提取的实体。主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。

(5)、Scrapy引擎(Scrapy Engine):

Scrapy引擎是整个框架的核心.它用来控制调试器、下载器、爬虫。实际上,引擎相当于计算机的CPU,它控制着整个流程。

那么,scrapy运行的主要流程呢:

1) 首先爬虫将需要发送请求的url(requests)经引擎交给调度器;

2) 排序处理后,经ScrapyEngine

DownloaderMiddlewares(有User_Agent, Proxy代理)交给Downloader;

3) Downloader向互联网发送请求,并接收下载响应.将响应经ScrapyEngine,可选交给Spiders;

4) Spiders处理response,提取数据并将数据经ScrapyEngine交给ItemPipeline保存;

5) 提取url重新经ScrapyEngine交给Scheduler进行下一个循环。直到无Url请求程序停止结束。

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:测试本地硬件的性能。

1)Scrapy -t basic weisun baidu.com -l:用来展示当前项目中有多少爬虫模板;-t:创建一个爬虫项目;Basic:创建基础模板, 2)Scrapy check weisun检查这个爬虫 weisun 是否可以运行;3)Scrapy crawl weisun运行 weisun 爬虫。4)Scrapy list展示当前目录下可以使用的爬虫文件。5)Scrapy edit weisun在 Linux 下修改 weisun 爬虫。

3c2004b7150a4f9ed44e05fa837735d6.gif

后续杂言

b94ebf5a5f1d36b45fedf1c846a0a49a.png

bd79dc22caa25e8964260cdac0160b03.png

scrapy的架构还是很精深的,几乎涵盖了爬虫的所有内容,本文只做一个简单的介绍,有兴趣的同学,可以找到scrapy的官方文档,做深入了解

近期关于爬虫的新闻挺多的,笔者借这篇文章也表达一下自己对爬虫的看法,希望大家不喜勿喷:

1)爬虫是门技术,只是用来收集公开的数据,就像是之前商店里陈列的商品价格,爬虫只是替代了大家线下拿着笔去抄录的过程,对于网站上没有展示的内容或者网站名言说是不能获取的内容,爬虫是不能获取的,这是学习技术的一个基本线的问题。

2)爬虫是一门位于数据价值底层的技能,还是想劝一下大家不要过于沉迷爬虫,多利用技术探索数据本身的价值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值