Skip to content

Commit 5f3a67f

Browse files
committed
[Add] README
1 parent bce2ce3 commit 5f3a67f

File tree

1 file changed

+138
-0
lines changed

1 file changed

+138
-0
lines changed

README.md

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
- [介绍](#介绍)
2+
- [结构](#结构)
3+
- [使用方法](#使用方法)
4+
- [接口](#接口)
5+
- [`common.spiders.common_spider.CommonSpider`](#commonspiderscommon_spidercommonspider)
6+
- [`use_cookies`](#use_cookies)
7+
- [`initialize`](#initialize)
8+
- [`init_normal_datasource`](#init_normal_datasource)
9+
- [`init_fail_datasource`](#init_fail_datasource)
10+
- [`common.items.common_item.CommonItem`](#commonitemscommon_itemcommonitem)
11+
- [`table`](#table)
12+
- [`primary_keys`](#primary_keys)
13+
- [`_url`](#_url)
14+
- [`use_fail`](#use_fail)
15+
- [关于`cache`](#关于cache)
16+
17+
# 介绍
18+
19+
本项目是[Project Nichijou](https://github.com/project-nichijou/intro)的一个子项目。根据[内部规范](https://github.com/project-nichijou/intro/blob/master/doc.md)实现的基于[Scrapy](https://scrapy.org/)二次开发的爬虫框架。
20+
21+
# 结构
22+
23+
```
24+
common
25+
├── cache
26+
│ ├── cache_maker.py # cache 生产
27+
│ └── cache_response.py # 封装过的cache Response
28+
├── config
29+
│ ├── settings.py # 配置文件
30+
│ └── settings_template.py # 配置模板
31+
├── cookies
32+
│ ├── cookies.json # cookies
33+
│ ├── cookies.json.backup # cookies 备份
34+
│ ├── cookies_io.py # cookies的IO封装
35+
│ └── cookies_template.json # cookies 模板
36+
├── database
37+
│ ├── database.py # 数据库
38+
│ └── database_command.py # 根据 [规范] 封装的 建表命令
39+
├── items # 根据 [规范] 封装的 Item
40+
│ ├── anime_item.py
41+
│ ├── anime_name_item.py
42+
│ ├── cache_item.py
43+
│ ├── common_item.py # Item 自定义父类
44+
│ ├── episode_item.py
45+
│ ├── episode_name_item.py
46+
│ ├── fail_request_item.py
47+
│ └── log_item.py
48+
├── middlewares
49+
│ ├── cache_middleware.py # 请求缓存中间件
50+
│ └── cookie_middleware.py # cookies持久化中间件
51+
├── pipelines
52+
│ └── storing_pipeline.py # 储存管道
53+
├── spiders
54+
│ └── common_spider.py # Spider 自定义父类
55+
└── utils
56+
├── ac.py # AC 自动机封装
57+
├── checker.py # 数据有效性封装
58+
├── datetime.py # 日期时间格式封装
59+
├── formatter.py # 格式化工具封装
60+
├── hash.py # 哈希工具封装
61+
└── logger.py # 日志封装
62+
```
63+
64+
# 使用方法
65+
66+
1. 根据下面的`template`进行配置 (复制到同目录并重命名)
67+
- `common/cookies/cookies_template.json`
68+
- `common/config/settings_template.py`
69+
2. 在主项目中配置`scrapy`的配置文件,重点有如下字段:
70+
```python
71+
DOWNLOADER_MIDDLEWARES = {
72+
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': None,
73+
'common.middlewares.cookie_middleware.CommonCookiesMiddleware': 920,
74+
'common.middlewares.cache_middleware.CommonCacheMiddleware': 930,
75+
}
76+
ITEM_PIPELINES = {
77+
'common.pipelines.storing_pipeline.CommonStoringPipeline': 300,
78+
}
79+
```
80+
注意:上面的配置不是必须的
81+
82+
可以考虑如下几种使用方式:
83+
- 子类继承父类,自定义某些字段,覆写值
84+
- 传参使用。注意:`Item`只有变量名为`_`开始的才能够作为属性直接修改,否则需要通过`dict`的方式。
85+
86+
# 接口
87+
88+
## `common.spiders.common_spider.CommonSpider`
89+
90+
- `parent`: `scrapy.Spider`
91+
92+
### `use_cookies`
93+
94+
- `type`: `boolean`
95+
- `desc`: 为`True`则为此蜘蛛启用`cookies`组件,为`False`则不启用。注意:启用的前提是在`settings`中配置了`middlewares`
96+
97+
### `initialize`
98+
99+
- `type`: `function`
100+
- `desc`: 初始化`spider`
101+
102+
### `init_normal_datasource`
103+
104+
- `type`: `function`
105+
- `desc`: 初始化正常情况下的数据源
106+
107+
### `init_fail_datasource`
108+
109+
- `type`: `function`
110+
- `desc`: 初始化失败重试情况下的数据源
111+
112+
## `common.items.common_item.CommonItem`
113+
114+
- `parent`: `scrapy.Item`
115+
116+
### `table`
117+
118+
- `type`: `str`
119+
- `desc`: 此`Item`将被保存到的数据表
120+
121+
### `primary_keys`
122+
123+
- `type`: `list`
124+
- `desc`: 存入数据表的`primary_keys` (主键),用于`update`数据,若此项缺失,则会直接覆写
125+
126+
### `_url`
127+
128+
- `type`: `str`
129+
- `desc`: 产生该`Item`请求的`url`,用于删除`fail`记录
130+
131+
### `use_fail`
132+
133+
- `type`: `boolean`
134+
- `desc`: 此`Item`是否回进行重试,或重试时是否需要删除失败记录
135+
136+
## 关于`cache`
137+
138+
`CommonCacheMiddleware`只处理了`cache`的读取,`cache`的写入需要在`Spider`中实现。可以使用`common/cache/cache_maker.py`当中封装过的函数实现。

0 commit comments

Comments
 (0)