[Python爬虫] 6-Scrapy框架

[Python爬虫] 6-Scrapy框架

# I.Scrapy框架架构:
# 1)框架概念:写一个爬虫,需要(发送网络请求,数据解析,数据存储,反反爬虫机制(更换ip代理、设置请求头等),异步请求等)这些工作如果每次都要自己从零开始写的话,比较浪费时间,因此Scrapy把一些基础的东西封装好了,在他上面写爬虫可以变的更加的高效(爬取效率和开发效率)

# 2)框架模块功能:
# 1.Engine:核心部分,负责在Spider和ItemPipeline,Downloader,Scheduler中间通信,传递数据等
# 2.Spider:爬虫部分,发送需要爬取的链接给引擎
# 3.Scheduler:调度器,负责接收引擎发送过来的请求,并按照一定的方式进行排列和整理,负责调度请求的顺序
# 4.Downloader:下载器,负责接收引擎传过来的下载请求,然后去网络上下载对应的数据再交还给引擎
# 5.Item Pipeline:管道,负责将Spider传递过来的数据进行保存
# 6.Downloader Middlewares:下载中间件,扩展下载器和引擎之间通信功能的中间件
# 7.Spider Middlewares:Spider中间件,扩展引擎和爬虫之间通信功能的中间件

# 3)框架入门:
# 3-1.安装(先装Twisted,pypiwin32,再装Scrapy)
# 3-2.创建项目(在命令行进入合适的路径创建:scrapy startproject [项目名称]->进入到项目所在的路径:scrapy genspider [爬虫名字] [爬虫的域名])
# # !!!注意!!!:爬虫名称不能和项目名称重复
# 3-3.项目结构目录介绍
# object_name
    # spiders包:所有的爬虫,都是存放到此处
    # items.py:用来存放爬虫爬取下来数据的模型
    # middlewares.py:用来存放各种中间件的文件
    # pipelines.py:用来将items的模型存储到本地磁盘中
    # settings.py:本爬虫的一些配置信息(比如请求头,多久发送一次请求,ip代理池等)
    # scrapy.cfg:项目的配置文件
# 3-4.调用项目(pycharm->file->open->上述创建的scrapy项目对应文件夹)

# 4)scrapy框架爬取糗事百科笔记:
# 4-1.!!!会遇到很多新的type,多打印type查看类型,然后import一下并且去查看这个类继承自哪个类,有什么方法可用!!!
# 例如:response是一个HtmlResponse类,继承自response类,可以使用xpath语法
# 上述用xpath语法提取出来的数据是Selector或是SelectorList类,继承自select类,如果想要获取其中的字符串,可以使用get():获取第一个文本str,或者getall():获取全部文本list
# 4-2.默认配置settings.py的修改:
    # 修改配置信息中的ROBOTSTXT_OBEY = False,取消遵守机器协议
    # 修改配置信息中的请求头将User-Agent加上
# 4-3.在spider下新建一个run.py,原因:scripy要用cmd执行爬虫,很麻烦,此处写上这个文件后续执行该文件即可
# 4-4.如果数据解析回来要传给pipline保存,可以收集所有的items,统一return
# 4-5.item:建议在item.py文件中定义好模型,scrapy框架中放弃字典的使用
# 4-6.pipline:专门用做数据的保存,通常要定义三个方法:
    # open_spider(self,spider):当爬虫被打开时执行
    # process_item(self,item,spider):当爬虫有item传过来时执行
    # close_spider(self,spider):当爬虫被关闭时时执行
# 同样的,要**pipline,应该修改默认配置settings.py,开启ITEM_PIPELINES部分