pal-crawl 1.0.0 → 1.0.2
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 +11 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.js +10 -0
- package/dist/config.js.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/pal.d.ts +13 -0
- package/dist/pal.js +102 -0
- package/dist/pal.js.map +1 -0
- package/dist/pal.test.d.ts +1 -0
- package/dist/pal.test.js +21 -0
- package/dist/pal.test.js.map +1 -0
- package/package.json +17 -3
- package/src/config.ts +0 -5
- package/src/pal.ts +0 -77
- /package/{src/index.ts → dist/index.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -5,3 +5,14 @@
|
|
|
5
5
|
[](https://github.com/vientorepublic/pal-crawl)
|
|
6
6
|
|
|
7
7
|
국회입법예고(pal.assembly.go.kr)의 진행 중인 입법 예고를 크롤링 하는 Typescript 구현체
|
|
8
|
+
|
|
9
|
+
## How to use
|
|
10
|
+
|
|
11
|
+
```javascript
|
|
12
|
+
import { PalCrawl } from 'pal-crawl';
|
|
13
|
+
|
|
14
|
+
const palCrawl = new PalCrawl();
|
|
15
|
+
const table = await palCrawl.get();
|
|
16
|
+
|
|
17
|
+
console.log(table);
|
|
18
|
+
```
|
package/dist/config.d.ts
ADDED
package/dist/config.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Config = void 0;
|
|
4
|
+
var Config;
|
|
5
|
+
(function (Config) {
|
|
6
|
+
Config["DOMAIN"] = "https://pal.assembly.go.kr";
|
|
7
|
+
Config["URL"] = "/napal/lgsltpa/lgsltpaOngoing/list.do";
|
|
8
|
+
Config["UserAgent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36";
|
|
9
|
+
})(Config || (exports.Config = Config = {}));
|
|
10
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAAA,IAAY,MAIX;AAJD,WAAY,MAAM;IAChB,+CAAqC,CAAA;IACrC,uDAA6C,CAAA;IAC7C,uIAA6H,CAAA;AAC/H,CAAC,EAJW,MAAM,sBAAN,MAAM,QAIjB"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PalCrawl = void 0;
|
|
4
|
+
var pal_1 = require("./pal");
|
|
5
|
+
Object.defineProperty(exports, "PalCrawl", { enumerable: true, get: function () { return pal_1.PalCrawl; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6BAAiC;AAAxB,+FAAA,QAAQ,OAAA"}
|
package/dist/pal.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface ITableData {
|
|
2
|
+
num: number;
|
|
3
|
+
subject: string;
|
|
4
|
+
proposerCategory: string;
|
|
5
|
+
committee: string;
|
|
6
|
+
numComments: number;
|
|
7
|
+
link: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class PalCrawl {
|
|
10
|
+
getPalHTML(): Promise<string>;
|
|
11
|
+
parseTable(html: string): ITableData[];
|
|
12
|
+
get(): Promise<ITableData[]>;
|
|
13
|
+
}
|
package/dist/pal.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.PalCrawl = void 0;
|
|
37
|
+
const axios_1 = __importStar(require("axios"));
|
|
38
|
+
const cheerio = __importStar(require("cheerio"));
|
|
39
|
+
const config_1 = require("./config");
|
|
40
|
+
class PalCrawl {
|
|
41
|
+
async getPalHTML() {
|
|
42
|
+
try {
|
|
43
|
+
const res = await axios_1.default.get(config_1.Config.URL, {
|
|
44
|
+
baseURL: config_1.Config.DOMAIN,
|
|
45
|
+
headers: {
|
|
46
|
+
'User-Agent': config_1.Config.UserAgent,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
return res.data;
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
if ((0, axios_1.isAxiosError)(err) && err.response) {
|
|
53
|
+
throw new Error(`Invalid response: ${err.response.status} ${err.response.statusText}`);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
if (err instanceof Error) {
|
|
57
|
+
throw new Error(err.message);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
console.error(err);
|
|
61
|
+
throw new Error('Unknown Error');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
parseTable(html) {
|
|
67
|
+
const $ = cheerio.load(html);
|
|
68
|
+
const body = $('body');
|
|
69
|
+
const table = body.find('table > tbody > tr');
|
|
70
|
+
const output = [];
|
|
71
|
+
table.map((i, el) => {
|
|
72
|
+
const subject = $(el).find('td.td_block > a.board_subject').text().trim();
|
|
73
|
+
if (subject) {
|
|
74
|
+
const link = $(el).find('td.td_block > a.board_subject').attr('href');
|
|
75
|
+
const numComments = Number($(el).find('td:nth-child(8)').text().replace(',', '').trim());
|
|
76
|
+
const proposerCategory = $(el).find('td:nth-child(3)').text().trim();
|
|
77
|
+
const committee = $(el).find('td:nth-child(4)').text().trim();
|
|
78
|
+
const num = Number($(el).find('td:nth-child(1)').text().trim());
|
|
79
|
+
let boardLink = '';
|
|
80
|
+
if (link) {
|
|
81
|
+
boardLink = config_1.Config.DOMAIN + link;
|
|
82
|
+
}
|
|
83
|
+
output.push({
|
|
84
|
+
num,
|
|
85
|
+
subject,
|
|
86
|
+
proposerCategory,
|
|
87
|
+
committee,
|
|
88
|
+
numComments,
|
|
89
|
+
link: boardLink,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
return output;
|
|
94
|
+
}
|
|
95
|
+
async get() {
|
|
96
|
+
const html = await this.getPalHTML();
|
|
97
|
+
const table = this.parseTable(html);
|
|
98
|
+
return table;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
exports.PalCrawl = PalCrawl;
|
|
102
|
+
//# sourceMappingURL=pal.js.map
|
package/dist/pal.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pal.js","sourceRoot":"","sources":["../src/pal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/pal.test.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const pal_1 = require("./pal");
|
|
4
|
+
describe('PalCrawl', () => {
|
|
5
|
+
test('getPalHTML: should be return string', async () => {
|
|
6
|
+
const palCrawl = new pal_1.PalCrawl();
|
|
7
|
+
const html = await palCrawl.getPalHTML();
|
|
8
|
+
expect(typeof html).toBe('string');
|
|
9
|
+
});
|
|
10
|
+
test('parseTable: array length should be 0 when invalid html', () => {
|
|
11
|
+
const palCrawl = new pal_1.PalCrawl();
|
|
12
|
+
const table = palCrawl.parseTable('asdf');
|
|
13
|
+
expect(table).toHaveLength(0);
|
|
14
|
+
});
|
|
15
|
+
test('get: array length should be 10', async () => {
|
|
16
|
+
const palCrawl = new pal_1.PalCrawl();
|
|
17
|
+
const table = await palCrawl.get();
|
|
18
|
+
expect(table).toHaveLength(10);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=pal.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pal.test.js","sourceRoot":"","sources":["../src/pal.test.ts"],"names":[],"mappings":";;AAAA,+BAAiC;AAEjC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,IAAI,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,QAAQ,GAAG,IAAI,cAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QACzC,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAClE,MAAM,QAAQ,GAAG,IAAI,cAAQ,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,QAAQ,GAAG,IAAI,cAAQ,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pal-crawl",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "국회입법예고(pal.assembly.go.kr)의 진행 중인 입법 예고 크롤러",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "vientorepublic",
|
|
@@ -8,7 +8,11 @@
|
|
|
8
8
|
"scripts": {
|
|
9
9
|
"build": "tsc",
|
|
10
10
|
"lint": "eslint \"src/**/*.ts\" --fix",
|
|
11
|
-
"format": "prettier --write \"src/**/*.ts\""
|
|
11
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
12
|
+
"test": "jest",
|
|
13
|
+
"test:verbose": "jest --verbose",
|
|
14
|
+
"test:watch": "jest --watch",
|
|
15
|
+
"test:cov": "jest --coverage"
|
|
12
16
|
},
|
|
13
17
|
"repository": {
|
|
14
18
|
"type": "git",
|
|
@@ -23,10 +27,20 @@
|
|
|
23
27
|
"cheerio": "^1.0.0"
|
|
24
28
|
},
|
|
25
29
|
"devDependencies": {
|
|
26
|
-
"@types/cheerio": "^0.22.35",
|
|
27
30
|
"@eslint/js": "^9.18.0",
|
|
31
|
+
"@types/cheerio": "^0.22.35",
|
|
32
|
+
"@types/jest": "^29.5.14",
|
|
28
33
|
"eslint": "^9.18.0",
|
|
34
|
+
"jest": "^29.7.0",
|
|
29
35
|
"prettier": "^3.4.2",
|
|
36
|
+
"ts-jest": "^29.2.5",
|
|
30
37
|
"typescript-eslint": "^8.20.0"
|
|
38
|
+
},
|
|
39
|
+
"jest": {
|
|
40
|
+
"preset": "ts-jest",
|
|
41
|
+
"testEnvironment": "node",
|
|
42
|
+
"testMatch": [
|
|
43
|
+
"**/*.test.ts"
|
|
44
|
+
]
|
|
31
45
|
}
|
|
32
46
|
}
|
package/src/config.ts
DELETED
package/src/pal.ts
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import axios, { isAxiosError } from 'axios';
|
|
2
|
-
import * as cheerio from 'cheerio';
|
|
3
|
-
import { Config } from './config';
|
|
4
|
-
|
|
5
|
-
export interface ITableData {
|
|
6
|
-
num: number;
|
|
7
|
-
subject: string;
|
|
8
|
-
proposerCategory: string;
|
|
9
|
-
committee: string;
|
|
10
|
-
numComments: number;
|
|
11
|
-
link: string;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export class PalCrawl {
|
|
15
|
-
public async getPalHTML(): Promise<string> {
|
|
16
|
-
try {
|
|
17
|
-
const res = await axios.get<string>(Config.URL, {
|
|
18
|
-
baseURL: Config.DOMAIN,
|
|
19
|
-
headers: {
|
|
20
|
-
'User-Agent': Config.UserAgent,
|
|
21
|
-
},
|
|
22
|
-
});
|
|
23
|
-
return res.data;
|
|
24
|
-
} catch (err) {
|
|
25
|
-
if (isAxiosError(err) && err.response) {
|
|
26
|
-
throw new Error(
|
|
27
|
-
`Invalid response: ${err.response.status} ${err.response.statusText}`,
|
|
28
|
-
);
|
|
29
|
-
} else {
|
|
30
|
-
if (err instanceof Error) {
|
|
31
|
-
throw new Error(err.message);
|
|
32
|
-
} else {
|
|
33
|
-
console.error(err);
|
|
34
|
-
throw new Error('Unknown Error');
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
public parseTable(html: string): ITableData[] {
|
|
41
|
-
const $ = cheerio.load(html);
|
|
42
|
-
const body = $('body');
|
|
43
|
-
const table = body.find('table > tbody > tr');
|
|
44
|
-
const output: ITableData[] = [];
|
|
45
|
-
table.map((i, el) => {
|
|
46
|
-
const subject = $(el).find('td.td_block > a.board_subject').text().trim();
|
|
47
|
-
if (subject) {
|
|
48
|
-
const link = $(el).find('td.td_block > a.board_subject').attr('href');
|
|
49
|
-
const numComments = Number(
|
|
50
|
-
$(el).find('td:nth-child(8)').text().replace(',', '').trim(),
|
|
51
|
-
);
|
|
52
|
-
const proposerCategory = $(el).find('td:nth-child(3)').text().trim();
|
|
53
|
-
const committee = $(el).find('td:nth-child(4)').text().trim();
|
|
54
|
-
const num = Number($(el).find('td:nth-child(1)').text().trim());
|
|
55
|
-
let boardLink = '';
|
|
56
|
-
if (link) {
|
|
57
|
-
boardLink = Config.DOMAIN + link;
|
|
58
|
-
}
|
|
59
|
-
output.push({
|
|
60
|
-
num,
|
|
61
|
-
subject,
|
|
62
|
-
proposerCategory,
|
|
63
|
-
committee,
|
|
64
|
-
numComments,
|
|
65
|
-
link: boardLink,
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
return output;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
public async get(): Promise<void> {
|
|
73
|
-
const html = await this.getPalHTML();
|
|
74
|
-
const table = this.parseTable(html);
|
|
75
|
-
console.log(table);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
File without changes
|