爬虫之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:\Users\vende\Downloads\Twisted-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 配置文件(配置和项目名称,一般不用管)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2020-12-01 20:15  以赛亚  阅读(124)  评论(0编辑  收藏  举报