scrapy的运行环境你了解吗?
-
本章目标
- scrapy项目目录以及各路径文件的用处
- scrapy的运行环境到底是怎样的
- 如何精简爬虫项目文件
-
scrapy项目目录以及各路径文件的用处
website ├── scrapy.cfg ├── test.py └── website ├── bloomfilter │ ├── bloomfilter.py │ ├── connection.py │ ├── defaults.py │ ├── dupefilter.py │ ├── picklecompat.py │ ├── pipelines.py │ ├── queue.py │ ├── scheduler.py │ ├── spiders.py │ ├── utils.py │ └── __init__.py ├── commands │ ├── crawlall.py │ ├── crawlsome.py │ ├── crawl_order_category.py │ ├── getname.py │ └── __init__.py ├── connection.py ├── extensions │ ├── openCloseLogStats.py │ └── __init__.py ├── items.py ├── middlewares.py ├── pipelines.py ├── settings.py ├── spiders │ ├── all_channel │ ├── base.py │ ├── base_crawl.py │ ├── buwei │ ├── difang │ └── __init__.py ├── tools │ ├── extract_domains.py │ ├── public.py │ └── __init__.py └── __init__.py
-
第一级目录
- 项目名:website
-
第二级目录
- scrapy.cfg
- 定义了settings的相对路径
- 定义了部署的相关配置
- test.py: 测试文件。
- website
- scrapy.cfg
-
第三级别目录 website
-
bloomfilter: 集成的开源布隆过滤器
-
comands: 命令行目录
- 命令行可以允许我们自定义爬虫调度方法
- 也可以考虑用其他插件调度,比如scrapyd
-
connection.py
- 数据库连接配置
- 这里可以不需要,可直接写在settings.py中
-
exttensions
- 自定义的扩展插件
-
items.py 实体映射关系
- key-value结构
- 用来存储你提取后的数据
- 一个item实例可以看成数据库的一行数据或者部分字段数据
-
middlewares.py 中间件
- 比如常用的随机请求user-agent可以定义在这里
- 也可以在做一重定向拦截的中间件
- 甚至加一些cookie
-
pipelines.py 管道
- 用来处理你的数据过滤、数据处理、数据存储逻辑【针对一个item实例】
- 你可以把数据插入es/mysql/mongodb/redis等等
-
settings.py 配置文件
- 整个爬虫项目的配置文件
- 默认的配置可以不用写
- 所有自定义的扩展配置路径应该定义在这里
-
spiders 爬虫文件
- 具体的爬虫解析逻辑
-
-
-
scrapy的运行环境到底是怎样的
-
我们看下爬虫cfg文件
- settings
- 可以定义settings的相对路径
- website.settings是指相对于第一层website的相对路径
- settings
-
写代码从helloword开始,探究世界从debug着手
-
其实scrapy可以不指定配置文件,直接使用自带的函数接口即可,比如运行一个单个爬虫文件可以这么做:
-
我们看下这个方法做了什么?【ENVVAR = ‘SCRAPY_SETTINGS_MODULE’】
-
发现了什么?
- 爬虫文件的运行环境其实靠cfg文件中的配置决定的。
-
-
-
如何简化scrapy项目?
hot_rank ├── logs │ └── hot_rank.log ├── middlewares.py ├── scrapy.cfg ├── search_hots.py ├── settings.py └── spiders ├── __init__.py ├── baidu.py ├── sogouweixin.py └── weibo.py
-
介绍:这是一个搜索百度、搜狗微信、微博的实时搜索爬虫, 入口是 search_hots.py
import sys import json from scrapy import signals from scrapy.crawler import CrawlerProcess from scrapy.utils.project import get_project_settings from spiders.baidu import BaiduSpider from spiders.sogouweixin import SogouweixinSpider from spiders.weibo import WeiboSpider from scrapy.signalmanager import dispatcher def spider_results(spidername): spider_class = None if spidername == "baidu": spider_class = BaiduSpider elif spidername == "weixin": spider_class = SogouweixinSpider elif spidername == "weibo": spider_class = WeiboSpider else: return [] results = [] def crawler_results(signal, sender, item, response, spider): results.append(dict(item)) dispatcher.connect(crawler_results, signal=signals.item_passed) process = CrawlerProcess(get_project_settings()) process.crawl(spider_class) # spider_class可以是爬虫文件中name中的字符串, 也可以是import导入的类 process.start() # the script will block here until the crawling is finished return json.dumps(results, ensure_ascii=False).encode('gbk', 'ignore').decode('gbk') if __name__ == '__main__': if len(sys.argv) >= 2: spidername = sys.argv[1] searchresult = spider_results(spidername) print(searchresult)
-
查看我定义的cfg文件
[settings] default = settings [deploy] #url = http://localhost:6800/ project = hot_rank
-
其实settings的配置都可以省略,只是我这里加了个随机请求头的中间件middleware.py
-
spiders下是爬虫的抓取逻辑
- 我的实体关系items直接定义在
__init__.py
- 我的实体关系items直接定义在
-
完整代码:https://github.com/zhu733756/recommends/tree/master/hot_rank【如果有用,记得点个小星星】
-
公众号:python爬虫小助手
-