pal-crawl 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +104 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/pal.d.ts +12 -0
- package/dist/pal.js +39 -10
- package/dist/pal.js.map +1 -1
- package/dist/pal.test.js +51 -0
- package/dist/pal.test.js.map +1 -1
- package/package.json +13 -3
package/README.md
CHANGED
|
@@ -17,9 +17,11 @@
|
|
|
17
17
|
|
|
18
18
|
- [Introduction](#introduction)
|
|
19
19
|
- [Installation](#installation)
|
|
20
|
+
- [Configuration](#configuration)
|
|
20
21
|
- [Base Types](#base-types)
|
|
21
22
|
- [Methods](#methods)
|
|
22
23
|
- [get](#get)
|
|
24
|
+
- [Examples](#examples)
|
|
23
25
|
- [License](#license)
|
|
24
26
|
|
|
25
27
|
---
|
|
@@ -38,6 +40,39 @@ npm install pal-crawl
|
|
|
38
40
|
|
|
39
41
|
---
|
|
40
42
|
|
|
43
|
+
## Configuration
|
|
44
|
+
|
|
45
|
+
`PalCrawl` 클래스는 생성자에서 선택적 설정 객체를 받을 수 있습니다.
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
interface PalCrawlConfig {
|
|
49
|
+
userAgent?: string; // 사용자 정의 User-Agent (기본값: Chrome User-Agent)
|
|
50
|
+
timeout?: number; // HTTP 요청 타임아웃 (밀리초, 기본값: 10000)
|
|
51
|
+
retryCount?: number; // 재시도 횟수 (기본값: 3)
|
|
52
|
+
customHeaders?: Record<string, string>; // 사용자 정의 헤더
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 기본 사용법
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
// 기본 설정으로 사용
|
|
60
|
+
const palCrawl = new PalCrawl();
|
|
61
|
+
|
|
62
|
+
// 사용자 정의 설정으로 사용
|
|
63
|
+
const palCrawl = new PalCrawl({
|
|
64
|
+
userAgent: 'My Custom Bot 1.0',
|
|
65
|
+
timeout: 15000,
|
|
66
|
+
retryCount: 5,
|
|
67
|
+
customHeaders: {
|
|
68
|
+
'Accept-Language': 'ko-KR',
|
|
69
|
+
Accept: 'text/html,application/xhtml+xml',
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
41
76
|
## Base Types
|
|
42
77
|
|
|
43
78
|
`ITableData`는 크롤링된 입법 예고 데이터를 나타내는 인터페이스입니다.
|
|
@@ -61,7 +96,7 @@ interface ITableData {
|
|
|
61
96
|
|
|
62
97
|
`get` 메서드는 진행 중인 입법 예고 데이터를 가져옵니다.
|
|
63
98
|
|
|
64
|
-
```
|
|
99
|
+
```typescript
|
|
65
100
|
import { PalCrawl } from 'pal-crawl';
|
|
66
101
|
|
|
67
102
|
const palCrawl = new PalCrawl();
|
|
@@ -72,6 +107,74 @@ console.log(table);
|
|
|
72
107
|
|
|
73
108
|
---
|
|
74
109
|
|
|
110
|
+
## Examples
|
|
111
|
+
|
|
112
|
+
### 기본 사용법
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
import { PalCrawl } from 'pal-crawl';
|
|
116
|
+
|
|
117
|
+
const palCrawl = new PalCrawl();
|
|
118
|
+
const data = await palCrawl.get();
|
|
119
|
+
console.log(data);
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### 사용자 정의 User-Agent 사용
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
import { PalCrawl, type PalCrawlConfig } from 'pal-crawl';
|
|
126
|
+
|
|
127
|
+
const config: PalCrawlConfig = {
|
|
128
|
+
userAgent: 'MyBot/1.0 (https://example.com)',
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
const palCrawl = new PalCrawl(config);
|
|
132
|
+
const data = await palCrawl.get();
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### 고급 설정 (타임아웃, 재시도, 헤더)
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
import { PalCrawl, type PalCrawlConfig } from 'pal-crawl';
|
|
139
|
+
|
|
140
|
+
const config: PalCrawlConfig = {
|
|
141
|
+
userAgent: 'Advanced Bot 2.0',
|
|
142
|
+
timeout: 20000, // 20초 타임아웃
|
|
143
|
+
retryCount: 2, // 2회 재시도
|
|
144
|
+
customHeaders: {
|
|
145
|
+
'Accept-Language': 'ko-KR',
|
|
146
|
+
'Cache-Control': 'no-cache',
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
const palCrawl = new PalCrawl(config);
|
|
151
|
+
const data = await palCrawl.get();
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### 에러 처리
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
import { PalCrawl } from 'pal-crawl';
|
|
158
|
+
|
|
159
|
+
const palCrawl = new PalCrawl({
|
|
160
|
+
timeout: 5000,
|
|
161
|
+
retryCount: 3,
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
try {
|
|
165
|
+
const data = await palCrawl.get();
|
|
166
|
+
console.log('입법예고 데이터:', data);
|
|
167
|
+
} catch (error) {
|
|
168
|
+
if (error.message.includes('timeout')) {
|
|
169
|
+
console.error('요청 타임아웃:', error.message);
|
|
170
|
+
} else {
|
|
171
|
+
console.error('크롤링 실패:', error.message);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
75
178
|
## License
|
|
76
179
|
|
|
77
180
|
This project is licensed under the MIT License. See the [LICENSE](#license) section for details.
|
package/dist/index.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export { PalCrawl } from './pal';
|
|
1
|
+
export { PalCrawl, type ITableData, type PalCrawlConfig } from './pal';
|
|
2
|
+
export { Config } from './config';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PalCrawl = void 0;
|
|
3
|
+
exports.Config = exports.PalCrawl = void 0;
|
|
4
4
|
var pal_1 = require("./pal");
|
|
5
5
|
Object.defineProperty(exports, "PalCrawl", { enumerable: true, get: function () { return pal_1.PalCrawl; } });
|
|
6
|
+
var config_1 = require("./config");
|
|
7
|
+
Object.defineProperty(exports, "Config", { enumerable: true, get: function () { return config_1.Config; } });
|
|
6
8
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6BAAuE;AAA9D,+FAAA,QAAQ,OAAA;AACjB,mCAAkC;AAAzB,gGAAA,MAAM,OAAA"}
|
package/dist/pal.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
export interface PalCrawlConfig {
|
|
2
|
+
userAgent?: string;
|
|
3
|
+
timeout?: number;
|
|
4
|
+
retryCount?: number;
|
|
5
|
+
customHeaders?: Record<string, string>;
|
|
6
|
+
}
|
|
1
7
|
export interface ITableData {
|
|
2
8
|
num: number;
|
|
3
9
|
subject: string;
|
|
@@ -7,6 +13,12 @@ export interface ITableData {
|
|
|
7
13
|
link: string;
|
|
8
14
|
}
|
|
9
15
|
export declare class PalCrawl {
|
|
16
|
+
private userAgent;
|
|
17
|
+
private timeout;
|
|
18
|
+
private retryCount;
|
|
19
|
+
private customHeaders;
|
|
20
|
+
constructor(config?: PalCrawlConfig);
|
|
21
|
+
private makeRequest;
|
|
10
22
|
getPalHTML(): Promise<string>;
|
|
11
23
|
parseTable(html: string): ITableData[];
|
|
12
24
|
get(): Promise<ITableData[]>;
|
package/dist/pal.js
CHANGED
|
@@ -39,18 +39,25 @@ const url_1 = require("url");
|
|
|
39
39
|
const cheerio = __importStar(require("cheerio"));
|
|
40
40
|
const config_1 = require("./config");
|
|
41
41
|
class PalCrawl {
|
|
42
|
-
|
|
42
|
+
constructor(config) {
|
|
43
|
+
this.userAgent = config?.userAgent ?? config_1.Config.UserAgent;
|
|
44
|
+
this.timeout = config?.timeout ?? 10000; // Default 10 seconds
|
|
45
|
+
this.retryCount = config?.retryCount ?? 3; // Default 3 attempts
|
|
46
|
+
this.customHeaders = config?.customHeaders ?? {};
|
|
47
|
+
}
|
|
48
|
+
async makeRequest() {
|
|
43
49
|
return new Promise((resolve, reject) => {
|
|
44
50
|
const url = new url_1.URL(config_1.Config.URL, config_1.Config.DOMAIN);
|
|
51
|
+
const headers = {
|
|
52
|
+
'User-Agent': this.userAgent,
|
|
53
|
+
...this.customHeaders,
|
|
54
|
+
};
|
|
45
55
|
const options = {
|
|
46
|
-
headers
|
|
47
|
-
|
|
48
|
-
},
|
|
56
|
+
headers,
|
|
57
|
+
timeout: this.timeout,
|
|
49
58
|
};
|
|
50
|
-
https
|
|
51
|
-
.
|
|
52
|
-
if (res.statusCode &&
|
|
53
|
-
(res.statusCode < 200 || res.statusCode >= 300)) {
|
|
59
|
+
const req = https.get(url, options, (res) => {
|
|
60
|
+
if (res.statusCode && (res.statusCode < 200 || res.statusCode >= 300)) {
|
|
54
61
|
reject(new Error(`Invalid response: ${res.statusCode} ${res.statusMessage}`));
|
|
55
62
|
return;
|
|
56
63
|
}
|
|
@@ -61,12 +68,34 @@ class PalCrawl {
|
|
|
61
68
|
res.on('end', () => {
|
|
62
69
|
resolve(data);
|
|
63
70
|
});
|
|
64
|
-
})
|
|
65
|
-
|
|
71
|
+
});
|
|
72
|
+
req.on('timeout', () => {
|
|
73
|
+
req.destroy();
|
|
74
|
+
reject(new Error(`Request timeout after ${this.timeout}ms`));
|
|
75
|
+
});
|
|
76
|
+
req.on('error', (err) => {
|
|
66
77
|
reject(err);
|
|
67
78
|
});
|
|
79
|
+
req.setTimeout(this.timeout);
|
|
68
80
|
});
|
|
69
81
|
}
|
|
82
|
+
async getPalHTML() {
|
|
83
|
+
let lastError;
|
|
84
|
+
for (let attempt = 1; attempt <= this.retryCount; attempt++) {
|
|
85
|
+
try {
|
|
86
|
+
return await this.makeRequest();
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
lastError = error;
|
|
90
|
+
if (attempt < this.retryCount) {
|
|
91
|
+
// Exponential backoff before retrying
|
|
92
|
+
const delay = Math.min(1000 * Math.pow(2, attempt - 1), 5000);
|
|
93
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
throw lastError;
|
|
98
|
+
}
|
|
70
99
|
parseTable(html) {
|
|
71
100
|
const $ = cheerio.load(html);
|
|
72
101
|
const body = $('body');
|
package/dist/pal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pal.js","sourceRoot":"","sources":["../src/pal.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAC/B,6BAA0B;AAC1B,iDAAmC;AACnC,qCAAkC;
|
|
1
|
+
{"version":3,"file":"pal.js","sourceRoot":"","sources":["../src/pal.ts"],"names":[],"mappings":"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"}
|
package/dist/pal.test.js
CHANGED
|
@@ -7,6 +7,21 @@ describe('PalCrawl', () => {
|
|
|
7
7
|
const html = await palCrawl.getPalHTML();
|
|
8
8
|
expect(typeof html).toBe('string');
|
|
9
9
|
});
|
|
10
|
+
test('constructor: should use custom userAgent when provided in config', async () => {
|
|
11
|
+
const config = {
|
|
12
|
+
userAgent: 'Custom User Agent',
|
|
13
|
+
};
|
|
14
|
+
const palCrawl = new pal_1.PalCrawl(config);
|
|
15
|
+
expect(palCrawl).toBeInstanceOf(pal_1.PalCrawl);
|
|
16
|
+
});
|
|
17
|
+
test('constructor: should use default userAgent when config is empty', async () => {
|
|
18
|
+
const palCrawl = new pal_1.PalCrawl({});
|
|
19
|
+
expect(palCrawl).toBeInstanceOf(pal_1.PalCrawl);
|
|
20
|
+
});
|
|
21
|
+
test('constructor: should use default userAgent when no config provided', async () => {
|
|
22
|
+
const palCrawl = new pal_1.PalCrawl();
|
|
23
|
+
expect(palCrawl).toBeInstanceOf(pal_1.PalCrawl);
|
|
24
|
+
});
|
|
10
25
|
test('parseTable: array length should be 0 when invalid html', () => {
|
|
11
26
|
const palCrawl = new pal_1.PalCrawl();
|
|
12
27
|
const table = palCrawl.parseTable('asdf');
|
|
@@ -17,5 +32,41 @@ describe('PalCrawl', () => {
|
|
|
17
32
|
const table = await palCrawl.get();
|
|
18
33
|
expect(table).toHaveLength(10);
|
|
19
34
|
});
|
|
35
|
+
test('constructor: should use custom timeout when provided', () => {
|
|
36
|
+
const config = {
|
|
37
|
+
timeout: 5000,
|
|
38
|
+
};
|
|
39
|
+
const palCrawl = new pal_1.PalCrawl(config);
|
|
40
|
+
expect(palCrawl).toBeInstanceOf(pal_1.PalCrawl);
|
|
41
|
+
});
|
|
42
|
+
test('constructor: should use custom retryCount when provided', () => {
|
|
43
|
+
const config = {
|
|
44
|
+
retryCount: 5,
|
|
45
|
+
};
|
|
46
|
+
const palCrawl = new pal_1.PalCrawl(config);
|
|
47
|
+
expect(palCrawl).toBeInstanceOf(pal_1.PalCrawl);
|
|
48
|
+
});
|
|
49
|
+
test('constructor: should use custom headers when provided', () => {
|
|
50
|
+
const config = {
|
|
51
|
+
customHeaders: {
|
|
52
|
+
'Accept-Language': 'ko-KR',
|
|
53
|
+
'Custom-Header': 'test-value',
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
const palCrawl = new pal_1.PalCrawl(config);
|
|
57
|
+
expect(palCrawl).toBeInstanceOf(pal_1.PalCrawl);
|
|
58
|
+
});
|
|
59
|
+
test('constructor: should use all custom config options', () => {
|
|
60
|
+
const config = {
|
|
61
|
+
userAgent: 'Custom Agent',
|
|
62
|
+
timeout: 15000,
|
|
63
|
+
retryCount: 2,
|
|
64
|
+
customHeaders: {
|
|
65
|
+
Accept: 'application/json',
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
const palCrawl = new pal_1.PalCrawl(config);
|
|
69
|
+
expect(palCrawl).toBeInstanceOf(pal_1.PalCrawl);
|
|
70
|
+
});
|
|
20
71
|
});
|
|
21
72
|
//# sourceMappingURL=pal.test.js.map
|
package/dist/pal.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pal.test.js","sourceRoot":"","sources":["../src/pal.test.ts"],"names":[],"mappings":";;AAAA,+
|
|
1
|
+
{"version":3,"file":"pal.test.js","sourceRoot":"","sources":["../src/pal.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pal-crawl",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "국회입법예고(pal.assembly.go.kr)의 진행 중인 입법 예고 크롤러",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "vientorepublic",
|
|
@@ -12,7 +12,18 @@
|
|
|
12
12
|
"test": "jest",
|
|
13
13
|
"test:verbose": "jest --verbose",
|
|
14
14
|
"test:watch": "jest --watch",
|
|
15
|
-
"test:cov": "jest --coverage"
|
|
15
|
+
"test:cov": "jest --coverage",
|
|
16
|
+
"clean": "rm -rf dist",
|
|
17
|
+
"prepack": "npm run clean && npm run build",
|
|
18
|
+
"prepublishOnly": "npm run lint && npm run test && npm run build",
|
|
19
|
+
"release:patch": "npm version patch && npm publish",
|
|
20
|
+
"release:minor": "npm version minor && npm publish",
|
|
21
|
+
"release:major": "npm version major && npm publish",
|
|
22
|
+
"release:dry": "npm publish --dry-run",
|
|
23
|
+
"version:check": "npm version --help",
|
|
24
|
+
"pack:local": "npm pack",
|
|
25
|
+
"size": "npm pack --dry-run",
|
|
26
|
+
"preview": "npm pack && tar -tzf melona-*.tgz"
|
|
16
27
|
},
|
|
17
28
|
"repository": {
|
|
18
29
|
"type": "git",
|
|
@@ -27,7 +38,6 @@
|
|
|
27
38
|
},
|
|
28
39
|
"devDependencies": {
|
|
29
40
|
"@eslint/js": "^9.18.0",
|
|
30
|
-
"@types/cheerio": "^0.22.35",
|
|
31
41
|
"@types/jest": "^29.5.14",
|
|
32
42
|
"eslint": "^9.18.0",
|
|
33
43
|
"jest": "^29.7.0",
|