Skip to content

Commit 5825e00

Browse files
author
Boris
committed
完善爬虫进阶文档
1 parent 2dfe434 commit 5825e00

4 files changed

Lines changed: 62 additions & 20 deletions

File tree

docs/source_code/Spider进阶.md

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,24 @@
22

33
## Spider参数:
44

5-
可直接阅读Spider源码查看
6-
7-
@param redis_key: 爬虫request及item存放redis中的文件夹
8-
@param min_task_count: redis 中最少任务数, 少于这个数量会从mysql的任务表取任务。默认1秒
9-
@param check_task_interval: 检查是否还有任务的时间间隔;默认5秒
10-
@param thread_count: 线程数,默认为配置文件中的线程数
11-
@param begin_callback: 爬虫开始回调函数
12-
@param end_callback: 爬虫结束回调函数
13-
@param delete_tabs: 爬虫启动时删除的表(redis里的key),元组类型。 支持正则; 常用于清空任务队列,否则重启时会断点续爬
14-
@param auto_stop_when_spider_done: 爬虫抓取完毕后是否自动结束或等待任务,默认自动结束
15-
@param auto_start_requests: 爬虫是否自动添加任务
16-
@param send_run_time: 发送运行时间
17-
@param batch_interval: 抓取时间间隔 默认为0 天为单位 多次启动时,只有当前时间与第一次抓取结束的时间间隔大于指定的时间间隔时,爬虫才启动
18-
@param wait_lock: 下发任务时否等待锁,若不等待锁,可能会存在多进程同时在下发一样的任务,因此分布式环境下请将该值设置True
19-
20-
### redis_key
5+
```python
6+
@param redis_key: 任务等数据存放在redis中的key前缀
7+
@param min_task_count: 任务队列中最少任务数, 少于这个数量才会添加任务,默认1。start_monitor_task 模式下生效
8+
@param check_task_interval: 检查是否还有任务的时间间隔;默认5秒
9+
@param thread_count: 线程数,默认为配置文件中的线程数
10+
@param begin_callback: 爬虫开始回调函数
11+
@param end_callback: 爬虫结束回调函数
12+
@param delete_tabs: 爬虫启动时删除的表(redis里的key),元组类型。 支持正则; 常用于清空任务队列,否则重启时会断点续爬
13+
@param auto_stop_when_spider_done: 爬虫抓取完毕后是否自动结束或等待任务,默认自动结束
14+
@param auto_start_requests: 爬虫是否自动添加任务
15+
@param send_run_time: 发送运行时间
16+
@param batch_interval: 抓取时间间隔 默认为0 天为单位 多次启动时,只有当前时间与第一次抓取结束的时间间隔大于指定的时间间隔时,爬虫才启动
17+
@param wait_lock: 下发任务时否等待锁,若不等待锁,可能会存在多进程同时在下发一样的任务,因此分布式环境下请将该值设置True
18+
```
19+
20+
下面介绍下理解起来可能有疑惑的参数
21+
22+
### 1. redis_key
2123

2224
redis_key为redis中存储任务等信息的key前缀,如redis_key="feapder:spider_test", 则redis中会生成如下
2325

@@ -34,4 +36,13 @@ key的命名方式为[配置文件](source_code/配置文件.md)中定义的
3436
# item 表模版
3537
TAB_ITEM = "{redis_key}:s_{item_name}"
3638
# 爬虫时间记录表
37-
TAB_SPIDER_TIME = "{redis_key}:h_spider_time"
39+
TAB_SPIDER_TIME = "{redis_key}:h_spider_time"
40+
41+
### 2. min_task_count
42+
43+
这个参数用于控制最小任务数的,少于这个数量再下发任务,防止redis中堆积任务太多,内存撑爆
44+
45+
46+
----
47+
48+
未完待续

feapder/core/spiders/batch_spider.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def __init__(
9191
@param min_task_count: redis 中最少任务数, 少于这个数量会从mysql的任务表取任务
9292
@param check_task_interval: 检查是否还有任务的时间间隔;
9393
@param task_limit: 数据库中取任务的数量
94-
@param redis_key: 爬虫request及item存放redis中的文件夹
94+
@param redis_key: 任务等数据存放在redis中的key前缀
9595
@param thread_count: 线程数,默认为配置文件中的线程数
9696
@param begin_callback: 爬虫开始回调函数
9797
@param end_callback: 爬虫结束回调函数

feapder/core/spiders/spider.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ def __init__(
4949
"""
5050
@summary: 爬虫
5151
---------
52-
@param redis_key: 爬虫request及item存放redis中的文件夹
53-
@param min_task_count: redis 中最少任务数, 少于这个数量会从mysql的任务表取任务。默认1秒
52+
@param redis_key: 任务等数据存放在redis中的key前缀
53+
@param min_task_count: 任务队列中最少任务数, 少于这个数量才会添加任务,默认1。start_monitor_task 模式下生效
5454
@param check_task_interval: 检查是否还有任务的时间间隔;默认5秒
5555
@param thread_count: 线程数,默认为配置文件中的线程数
5656
@param begin_callback: 爬虫开始回调函数

tests/test_spider_params.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# -*- coding: utf-8 -*-
2+
"""
3+
Created on 2021-03-07 21:27:00
4+
---------
5+
@summary:
6+
---------
7+
@author: liubo
8+
"""
9+
10+
import feapder
11+
12+
13+
class TestSpiderParams(feapder.Spider):
14+
# 自定义数据库,若项目中有setting.py文件,此自定义可删除
15+
__custom_setting__ = dict(
16+
REDISDB_IP_PORTS="localhost:6379", REDISDB_USER_PASS="", REDISDB_DB=0
17+
)
18+
19+
def start_requests(self):
20+
for i in range(100):
21+
print(f"下发任务 {i}")
22+
yield feapder.Request(f"https://www.baidu.com?p={i}")
23+
24+
def parse(self, request, response):
25+
print(request.url)
26+
27+
28+
if __name__ == "__main__":
29+
spider = TestSpiderParams(redis_key="feapder:test_spider_params", min_task_count=10)
30+
spider.start_monitor_task()
31+
# spider.start()

0 commit comments

Comments
 (0)