Scrapy简介:
Scrapy是用纯python实现一个爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。Scrapy使用了Twisted异步网络框架,可以加快我们的下载速度。
异步:调用在发出之后,这个调用就直接返回,不管有无结果
非阻塞:关注的是程序在等待结果时的状态,不能立刻得到结果之前,该调用不会阻塞当前线程
scrapy框架:
- scrapy Engine(引擎):总指挥:负责数据和信号的在不同模块间的传递,scrapy已经实现
- scheduler(调度器):一个队列,存放引擎发过来的request请求,scrapy已经实现
- Downloader (下载器):下载把引擎发过来的requests请求,并返回给引擎,scrapy已经实现
- Spider (爬虫):处理引擎发来来的response,提取数据,提取url,并交给引擎,需要手写
- Item Pipeline(管道):处理引擎传过来的数据,比如存储,需要手写
- Downloader Middlewares(下载中间件):可以自定义的下载扩展,比如设置代理,一般不用手写
- Spider MiddlewaresSpider(中间件):可以自定义requests请求和进行response过滤,一般不用手写
创建Spider:
- 创建一个scrapy项目——scrapy startproject myspider
- 生成一个爬虫——scrapy genspider xxxx “xxxx.cn”
- 提取数据——完善spider,使用xpath等方法
- 保存数据——pipeline中保存数据
定义多个pipeline,例如先处理数据再存储数据,例如不同的域名要进行不同的提取,但要注意process_item名称不能变,其形参(spider)可以通过spider.name == "itcast"进行判断操作。
# logging:不同等级的日志,保存到本地,
import logging
# 获取当前日志输出位置
logger = logging.getLogger(__name__)
# setting可以设置LOG_FILE = './log.log'保存到本地
logger.warning(item)
scrapy
- settings中设置LOG_LEVEL=“WARNING”
- settings中设置LOG_FILE=“./a.log”#设置日志保存的位置,设置会后终端不会显示日志内容
- import logging,实例化logger的方式在任何文件中使用logger输出内容。
普通项目中
-
import logging #设置日志输出的样式,格式。 logging.basicConfig(...) # 实例化logger=logging.getLogger(__name__) 在任何py文件中调用logger即可