scripy的初步理解

参考:

http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/tutorial.html

https://zhuanlan.zhihu.com/woodenrobot

Scripy的理解:

    scripy的整体架构:
        1.Scrapy Engine  引擎
            触发事务,整个系统的数据流处理
            理解:
                中心,类似于CPU的东西
        2.Scheduler  调度器
            用来接收引擎发过来的请求,压入队列,引擎再次请求的时候,返回
            理解:
                初始爬取的url,待爬取的url 都存在这里,等待爬取
                调度器可以自动去重
        3.Downkiader: 下载器
            用于下载网页的内容,先给了引擎,之后引擎将网页的内容返回给蜘蛛
        4.Spiders 爬虫,蜘蛛
            用它来定制特定的域名或者 网页的解析规则
            用于分析响应(response),提取item 或者额外跟进的URL类
            每个spider 负责处理一个(或者一些)特定的网站
        5.item Pipline  项目管道:
            处理数据
            蜘蛛爬取数据(项目), 清晰,存储,验证数据 
            理解;
                爬虫爬取的数据存入Item--->item存入项目管道(Pipline)
                --->数据的处理--->存入本地文件,或者存入数据库..
        6.Downloader Middlewares:
            下载中间件
            位于Scrapy引擎和下载器之间的钩子框架
            用于处理Scrapy引擎和下载器之间的请求和响应
            理解:
                常用于爬虫自动更换user-agent,IP等功能
        7.Spider  中间件        
            1..Spider Middlewares 蜘蛛中间件
                Scrapy引擎和蜘蛛之间的钩子框架
                用于处理蜘蛛的响应输入和请求输出...
            2..Scheduler Middlewares 调度中间件:
                介于Scripy 引擎和调度之间的中间件
                从Scrapy引擎发送到调度的请求和响应...
            3.作用:
                Spider中间件是在引擎及Spider之间的特定钩子(specific hook),
                处理spider的输入(response)和输出(items及requests)。 
                其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。
            
        8.数据流 DataFlow:
            1.引擎打开一个网站,找到处理该网站的Spider
                并且向该spider请求,第一个需要爬取的URL(s);
            2.引擎从Spider获取到的第一个  要爬取的URL,并在调度器(Scheduler)  
                以request调度.
            3.引擎向调度器请求下一个需要爬取的URL 
            4.调度器返回下一个需要爬取的URL,给引擎
                引擎将URL 通过下载中间件(请求request方向),转发给下载器
            5.一旦页面下载完毕,下载器生成一个该页面的response,   
                并通过下载中间件(reponse方向),发送给引擎
            6.引擎下载器接收到response并,通过  Spider中间件,发送给  
                spider处理
            7.Spider 处理response,并返回爬取到的Item 及 新的request给引擎
            8.引擎将 Spider返回的,爬取到的item数据 给了ItemPipline,   
                将Spider返回的request 给调度器
            
            9.重复,直到调度器中没有更多的request,引擎关闭该网站...
            
            
    创建爬虫项目流程;
        1.创建一个项目:
            scrapy startproject scrapyspider
        2.初始化之后,自动产生的目录:
            1.scrapy.cfg    
                配置文件
            2.scrapyspider
                该项目的python模块,在这里书写代码
                items.py:
                    项目中的item文件
                piplines:
                    项目中的pipelines文件
                settings:
                    项目设置文件
                spider:
                    放置spider代码的目录
            
    开始编写爬虫;
        1.spider:
            是一个类
        2.继承scrapy.Spider类
            定义3个属性:
                name:用于区分Spider,唯一的
                start_urls:
                    Spider在启动的时候,需要爬取的url列表
                parse:
                    spider的一个方法
                        被调用的时候,每个初始url完成下载后,生成的response对象
                        都会作为唯一的参数,传递给该函数.
                    
                        该方法,负责解析返回的数据response
                        提取数据(item),以及生成进一步处理的URL的request对象
                        
            
        3.执行步骤:
            1.scrapyspider/spiders目录下的blog_spider.py文件
                在这个目录下面,写你的爬虫
                爬虫的名字,叫做...woodenrobot
            
            2.在scrapyspider/ 路径下面,运行下面的命令
                scrapy crawl woodenrobot
            
        4.原理的理解:
            1.定义一个入口页面
            2.一个页面,有其他的链接
                获取这些链接,放在爬虫的抓取队列中
            
            3.然后,到新的页面上,递归调用
                就是深度遍历和广度遍历
                类似于,之前的扒网站的方式  ........
            4.Python Twisted介绍
                https://blog.csdn.net/hanhuili/article/details/9389433
                Twisted是一个事件驱动型的网络引擎
                
    介绍一些专有的名词;
        Items:
            从非结构性的数据源提取结构性数据,例如网页
            为了定义常用的输出数据,Scrapy提供了 Item 类    
            Item 对象是种简单的容器,保存了爬取到得数据。    
        声明Item:
            tem使用简单的class定义语法以及 Field 对象来声明
            import scrapy


            class Product(scrapy.Item):
                name = scrapy.Field()
                price = scrapy.Field()
                stock = scrapy.Field()
                last_updated = scrapy.Field(serializer=str)    
        那filed又是什么??(就是字典而已)
            Field 对象指明了每个字段的元数据(metadata)。
            Field:
                翻译为领域,属性  ---叫做属性好理解一点的
            意义:
                Field 仅仅是内置的 dict 类的一个别名,
                并没有提供额外的方法或者属性。
                换句话说, Field 对象完完全全就是Python字典(dict)            
                
    爬取豆瓣的案例:
        ..........自己看代码..  参考案例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值