@@ -8,6 +8,7 @@ XCrawl 是 Nodejs 多功能爬虫库。只需简单的配置即可抓取 HTML
8
8
9
9
- 简单的配置即可抓取 HTML 、JSON 、文件资源等等
10
10
- 批量请求可选择模式 异步 或 同步
11
+ - 轮询功能
11
12
- 拟人化的请求间隔时间
12
13
13
14
## 安装
@@ -20,7 +21,7 @@ npm install x-crawl
20
21
21
22
# # 示例
22
23
23
- 获取 bilibili 国漫主页的推荐轮播图片为例:
24
+ 每隔一天就获取 bilibili 国漫主页的推荐轮播图片为例:
24
25
25
26
` ` ` js
26
27
// 1.导入模块 ES/CJS
@@ -32,18 +33,21 @@ const myXCrawl = new XCrawl({
32
33
intervalTime: { max: 6000, min: 2000 } // 控制请求频率
33
34
})
34
35
35
- // 3.调用 fetchHTML API 爬取 HTML
36
- myXCrawl.fetchHTML(' https://www.bilibili.com/guochuang/' ).then(( res) => {
37
- const { jsdom } = res.data // 默认使用了 JSDOM 库解析 HTML
36
+ // 3.调用 fetchPolling API 开始轮询功能,每隔一天会调用回调函数
37
+ myXCrawl.fetchPolling({ d: 1 }, () => {
38
+ // 3.1.调用 fetchHTML API 爬取 HTML
39
+ myXCrawl.fetchHTML(' https://www.bilibili.com/guochuang/' ).then(( res) => {
40
+ const { jsdom } = res.data // 默认使用了 JSDOM 库解析 HTML
38
41
39
- // 3 .1 .获取轮播图片的 src
40
- const imgSrc = []
41
- const recomEls = jsdom.window.document.querySelectorAll('.chief-recom-item')
42
- recomEls.forEach((item) => imgSrc.push(item.querySelector('img').src))
42
+ // 3 .2 .获取轮播图片的 src
43
+ const imgSrc = []
44
+ const recomEls = jsdom.window.document.querySelectorAll('.chief-recom-item')
45
+ recomEls.forEach((item) => imgSrc.push(item.querySelector('img').src))
43
46
44
- // 3.2.调用 fetchFile API 爬取图片
45
- const requestConifg = imgSrc.map(( src) => ({ url: `https: ${src} ` }))
46
- myXCrawl.fetchFile({ requestConifg, fileConfig: { storeDir: ' ./upload' } })
47
+ // 3.3.调用 fetchFile API 爬取图片
48
+ const requestConifg = imgSrc.map(( src) => ({ url: `https: ${src} ` }))
49
+ myXCrawl.fetchFile({ requestConifg, fileConfig: { storeDir: ' ./upload' } })
50
+ })
47
51
})
48
52
` ` `
49
53
@@ -63,6 +67,7 @@ class XCrawl {
63
67
fetchHTML(config: IFetchHTMLConfig): Promise< IFetchHTML>
64
68
fetchData< T = any>( config: IFetchDataConfig) : Promise< IFetchCommon< T>>
65
69
fetchFile(config: IFetchFileConfig): Promise< IFetchCommon< IFileInfo>>
70
+ fetchPolling(config: IFetchPollingConfig, callback: (count: number) => void): void
66
71
}
67
72
` ` `
68
73
@@ -177,6 +182,28 @@ myXCrawl.fetchFile({
177
182
})
178
183
```
179
184
185
+ ### fetchPolling
186
+
187
+ fetchPolling 是 [myXCrawl](https://github.com/coder-hxl/x-crawl/blob/main/document/cn.md#%E7 %A4 %BA%E4 %BE%8 B-1 ) 实例的方法,通常用于进行轮询操作,比如每隔一段时间获取新闻之类的。
188
+
189
+ #### 类型
190
+
191
+ ```ts
192
+ function fetchPolling(
193
+ config: IFetchPollingConfig,
194
+ callback: (count: number) => void
195
+ ): void
196
+ ```
197
+
198
+ #### 示例
199
+
200
+ ```js
201
+ myXCrawl.fetchPolling({ h: 1 , m: 30 }, () => {
202
+ // 每隔一个半小时会执行一次
203
+ // fetchHTML/fetchData/fetchFile
204
+ })
205
+ ```
206
+
180
207
## 类型
181
208
182
209
#### IAnyObject
@@ -258,13 +285,25 @@ interface IFetchFileConfig extends IFetchBaseConifg {
258
285
}
259
286
```
260
287
288
+ #### IFetchPollingConfig
289
+
290
+ ```ts
291
+ interface IFetchPollingConfig {
292
+ Y?: number // 年 (按每年365 天)
293
+ M?: number // 月 (按每月30 天)
294
+ d?: number // 日
295
+ h?: number // 小时
296
+ m?: number // 分钟
297
+ }
298
+ ```
299
+
261
300
#### IFetchCommon
262
301
263
302
```ts
264
303
type IFetchCommon<T> = {
265
304
id: number
266
305
statusCode: number | undefined
267
- headers: IncomingHttpHeaders // node:http type
306
+ headers: IncomingHttpHeaders // node:http 类型
268
307
data: T
269
308
}[]
270
309
```
0 commit comments