Anaconda + scrapy
1.scrapy框架
scrapy框架的核心是scrapy引擎,负责调度各个组件和传递消息,运行时,爬虫文件读取数据,爬出url并发送新的请求,url由引擎交给调度器,调度器排队后返回引擎,引擎再交给下载器下载html源码交给引擎,引擎将数据交给管道文件处理,同时将响应给爬虫文件,爬虫会继续处理爬取这个响应中所有url,直至超出域名就停止。管道文件会将处理好的数据存储成文件(sql,csv,json)
2.安装
anaconda base环境被我弄坏了,搞了新的环境
conda activate new,进入名为new的新环境
conda install scrapy 安装scrapy
安装完成后
scrapy bench 测试
scrapy startproject 名字 创建新工程,就是在磁盘创建好工程相关文件
每一个工程都是这样的结构,ITcast多了个__pycache__是因为运行产生了中间文件
工程生成文件:
scrapy.cfg(略重要)
setting.py(重要)
pipelines.py(定义处理item数据的方法,并存储进文件)
items.py(定义items数据结构,爬取的每一个目标都是一个item,item交由管道文件处理)
middlewares.py(暂时没有接触)
spider目录下没有爬虫文件,使用
scrapy genspider 名字 "域名" 添加,默认使用basic模板
所以可以添加多个爬虫(在spider下添加爬虫,才能使项目运行)
3.重要函数
setting.py
1 ROBOTSTXT_OBEY = False#不服从网站健壮性管理 2 3 ITEM_PIPELINES = { 4 'ITcast.pipelines.ItcastPipeline': 300,#管道文件优先级,越小越优先,中间件也有优先级 5 }
pipeline.py
1 def __init__(self): 2 3 def process_item(self, item, spider):#必须实现,且必须return item,这样引擎才知道这个item已经处理完毕,否则会一直处理,直至成功 4 return item 5 6 def close_spider(self,spider):
item.py
1 class ItcastItem(scrapy.Item): 2 info1 = scrapy.Field() 3 info2 = scrapy.Field()
定义处理的item结构,由于info1相当于字典键,所以定义是不要加__init__,不要加self
myspider.py
1 name = 'ITcast' 2 allowed_domains = ['www.kayoudidai.com'] 3 start_urls = ['http://www.kayoudidai.com/news/80#tab2'] 4 5 def parse(self, response):
以上必须实现
parse中必须实现yield item 否则循环中断
4.执行过程
爬虫文件myspider.py处理每一个响应,并按给定的xpath表达式处理过滤数据,存入item,通过 yield item传给pipeline.py处理并储存