ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python爬虫架构之scrapy重出江湖

2020-11-21 15:00:25  阅读:94  来源: 互联网

标签:python Scrapy 爬虫 item scrapy weisun com


本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

以下文章来源于腾讯云 作者:数据森麟

( 想要学习Python?Python学习交流群:1039649593,满足你的需求,资料都已经上传群文件流,可以自行下载!还有海量最新2020python学习资料。 )
在这里插入图片描述
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文件:

#!/usr/bin/env python
# _*_ UTF-8 _*_
# author:livan
import scrapy
from my_crawler.items import MyCrawlerItem
from scrapy.http import Request
class 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 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的基本架构图,我们可以做一些简单的介绍:

(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;

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

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

  3. 提取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 爬虫。

 

后续杂言

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

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

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

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

标签:python,Scrapy,爬虫,item,scrapy,weisun,com
来源: https://www.cnblogs.com/aa1273935919/p/14015687.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有