zoukankan      html  css  js  c++  java
  • 爬虫之Scrapy框架

    1.Scrapy  VS  requests
        requests 一个爬取库,只要作用爬取数据,模拟浏览器,默认是一个线程在运行;(军人)
        scrapy 一个框架,集成:
            数据的采集:重试机制/设置超时/代理/随机浏览器头,
            数据的解析:css选择器,xpath, 正则,(前三个默认支持)BeautifulSoup,Selenium;
            数据的存储:专门的类处理,并且可以对每条数据进行处理,支持存储:文件,数据库;
            默认是开启16个线程;(军队)
        学习成本:requests学习简单;scrapy学习成本稍微高一些(类Django)
        爬取速度:requests要想速度快,可以开启多线程;scrapy默认开启16个线程,底层用的异步框架Twisted(类似Tornado);
     
    2.Scrapy简介
        使用纯python写的一个爬虫库,底层采集数据的框架使用的是Twisted,默认开启16个线程,所以爬取效率非常高;
        scrapy的执行的流程图:
            写一个爬取的url,然后封装成一个request的对象,写Spiders(多个)-->交给Spider Middlewares --> 接着由 Scrapy Engine ---> Scheduler(调度器,会有很多封装好的request对象在调度器队列里),引擎(Scrapy Engine)---> DownloaderMiddlewares(下载中间件--配置代理/请求头) ---> Downloader(下载器-->去互联网获取数据,封装成response对象) ---> DownloaderMiddlewares(如果请求正常接着走,否则可以重试) ---> 引擎(Scrapy Engine)---> Spider Middlewares ---> Spider(爬虫,很多) 接受到的数据不建议保存在spider里,而是封装到Items里,好处是可以单条数据处理--->ItemPipline ;
     
    3.Scrapy安装
        win下的环境安装:
            进入相应的虚拟环境
            安装scrapy前,需要装一个依赖,不然会报错:
            pip  install  pywin32
            scrapy框架的安装:pip  install  scrapy  -i  https://pypi.douban.com/simple/
            安装遇到的问题:
                    当前环境win10,python_3.6.1,64位。 
                    在windows下,在dos中运行pip install Scrapy报错:
                    building 'twisted.test.raiser' extension
                    error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build                         Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools
     
            解决办法:
                     http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted 下载twisted对应版本的whl文件(如我的Twisted‑17.5.0‑cp36‑cp36m‑win_amd64.whl),cp后面是python版本,amd64代表64位,运行命令:
                        pip install C:UsersvendeDownloadsTwisted-20.3.0-cp38-cp38-win_amd64.whl
                       其中install后面为下载的whl文件的完整路径名 
                        安装完成后,再次运行:
                        pip install scrapy -i https://pypi.douban.com/simple
                        即可安装成功;
     
    4.检验Scrapy是否安装上;
            进入虚拟环境然后输入scrapy可以出现其版本等相关信息即可;
     
    5.Scrapy使用案例及学习步骤
        1.爬取尚硅谷老师信息:老师名字-name, 职位:position,头像:image,简介:info, 特点:point,风格:style, 保存json文件中;
        2.使用xpath解析:
        3.关于scrapy项目的创建执行相关命令:标红是动态变化的
            创建scrapy爬虫项目命令:scrapy  startproject  MySpiderProject
            cd  MySpiderProject 
            创建爬虫(聚焦类型)命令:scrapy  genspider  atguigu_teacher  www.atguigu.com
            运行爬虫命令:scrapy crawl  atguigu_teacher 
          
        爬虫项目的结构基本介绍,有哪些文件,分别是做什么的
     
        4.测试爬虫是否可以请求到数据,打印数据;
        5.使用xpath解析数据,封装到Item,使用yield 把数据返回到管道文件(ItemPipline)
        6.在管道文件中对每条数据进行处理,保存,要在设置里配置;
        当爬虫开始执行的时候,会执行open_spider方法;(开始)
        当传入数据的时候,每次都会执行process_item(根据数据的多少来执行)(中间)
        当爬虫结束的时候,会执行close_spider方法;(结束)
     
    6.使用scrapy实现基本爬虫
        1.入门案例硅谷老师信息
        聚焦爬虫:url:http://www.atguigu.com/teacher.shtml
        硅谷老师信息的xpath
        公共部分://div[@class="con"]/ul/li
     
        name://div[@class="con"]/ul/li/div[@class="t-info"]/h5/b[1]/text()
        position://div[@class="con"]/ul/li/div[@class="t-info"]/h5/b[2]/text()
        image://div[@class="con"]/ul/li/div[@class="t-img"]/img/@src
        info://div[@class="con"]/ul/li/div[@class="t-info"]/div[@class="memo"]/div[2]/text()
        或者 : //div[@class="con"]/ul/li//div[@class="memo-i"]/text()
     
        point://div[@class="con"]/ul/li/div[@class="t-info"]/p[1]/a
        style://div[@class="con"]/ul/li/div[@class="t-info"]/p[2]/text()
        
        进入虚拟环境:且进入到创建项目的目录pyproject
        
        scrapy startproject MySpiderProject
        (可以看到这个是个项目,可以用ide打开,然后可以看到里面有个和项目名称一样的文件夹,
        里面有spiders文件夹,这个文件夹里就是放置我们的爬虫,可以有多个)
        cd MySpiderProject
        scrapy genspider atguigu_teacher(爬虫名字)  www.atguigu.com(允许爬取的范围)  // 可以创建四个爬虫(basic-基本/规则)
        这时候在spiders文件夹中就会有 atguigu_teacher.py 爬虫文件
        
        一般情况下会单独写一个.py文件 来执行爬虫
        这个文件名:start/main  位置一般在项目根目录下;
        main.py文件内代码:
        from scrapy import cmdline 
        cmdline.execute("scrapy crawl atguigu_teacher".split())
        以后运行项目,直接运行main.py即可
        
        项目文件结构介绍:
        MySpiderProject
            --MySpiderProject
                --spiders 存放多个爬虫的目录
                --items.py  里面有一个类(类名无所谓一般随项目定义),
                    肯定继承scrapy.Item(就是流程图里的Items),里面用于封装数据,传到管道文件;
                --middlewares.py 下载中间件配置文件(设置代理/浏览器头即在这里);
                --pipelines.py  专门用于处理数据,包括:添加/删除字段,存储数据;
                --settings.py  配置文件,配置浏览器头,配置middlewares.py,pipelines.py, 是否遵循爬虫协议(默认是遵循的-True,我们要改为False);
     
            --scrapy.cfg 配置文件(配置和项目名称,一般不用管)
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    python 读写文件
    python之创建文件写入内容
    python之生成随机密码
    python实例七
    python 实例六
    python 实例四
    python实例二
    python实例一
    【BZOJ】1610: [Usaco2008 Feb]Line连线游戏
    【BZOJ】1602:[Usaco2008 Oct]牧场行走
  • 原文地址:https://www.cnblogs.com/guo-s/p/14070478.html
Copyright © 2011-2022 走看看