@@ -8,6 +8,7 @@ XCrawl 是 Nodejs 多功能爬虫库。只需简单的配置即可抓取 HTML
88
99- 简单的配置即可抓取 HTML 、JSON 、文件资源等等
1010- 批量请求可选择模式 异步 或 同步
11+ - 轮询功能
1112- 拟人化的请求间隔时间
1213
1314## 安装
@@ -20,7 +21,7 @@ npm install x-crawl
2021
2122# # 示例
2223
23- 获取 bilibili 国漫主页的推荐轮播图片为例:
24+ 每隔一天就获取 bilibili 国漫主页的推荐轮播图片为例:
2425
2526` ` ` js
2627// 1.导入模块 ES/CJS
@@ -32,18 +33,21 @@ const myXCrawl = new XCrawl({
3233 intervalTime: { max: 6000, min: 2000 } // 控制请求频率
3334})
3435
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
3841
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))
4346
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+ })
4751})
4852` ` `
4953
@@ -63,6 +67,7 @@ class XCrawl {
6367 fetchHTML(config: IFetchHTMLConfig): Promise< IFetchHTML>
6468 fetchData< T = any>( config: IFetchDataConfig) : Promise< IFetchCommon< T>>
6569 fetchFile(config: IFetchFileConfig): Promise< IFetchCommon< IFileInfo>>
70+ fetchPolling(config: IFetchPollingConfig, callback: (count: number) => void): void
6671}
6772` ` `
6873
@@ -177,6 +182,28 @@ myXCrawl.fetchFile({
177182})
178183```
179184
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+
180207## 类型
181208
182209#### IAnyObject
@@ -258,13 +285,25 @@ interface IFetchFileConfig extends IFetchBaseConifg {
258285}
259286```
260287
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+
261300#### IFetchCommon
262301
263302```ts
264303type IFetchCommon<T> = {
265304 id: number
266305 statusCode: number | undefined
267- headers: IncomingHttpHeaders // node:http type
306+ headers: IncomingHttpHeaders // node:http 类型
268307 data: T
269308}[]
270309```
0 commit comments