forked from dreimert/syd-scraping
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
105 lines (93 loc) · 2.77 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
const TikaServer = require('tika-server')
const rp = require('request-promise')
const cheerio = require('cheerio')
const Promise = require('bluebird')
// Télécharger une page HTML
const getHtml = (url) => {
if (url) {
return rp(url)
.then(function (htmlString) {
// console.log(htmlString)
return htmlString
})
.catch(function (err) {
console.error('getHtml :: RP ERROR:', err)
})
} else {
console.error('getHtml :: url undefined')
return Promise.resolve(undefined)
}
}
// Télécharger un pdf
const getPdf = (url) => {
if (url) {
return rp({
url: url,
encoding: null
}).then(function (pdf) {
// console.log('PDF download')
return pdf
}).catch(function (err) {
console.error('getPdf :: RP ERROR:', err)
})
} else {
console.error('getPdf :: url undefined')
return Promise.resolve(undefined)
}
}
const downloadAndAnalysePdf = (urls = ['http://planete.insa-lyon.fr/scolpeda/f/ects?id=36736&_lang=fr']) => {
// Lance le serveur Tika
// Doc : https://www.npmjs.com/package/tika-server
const ts = new TikaServer()
ts.on('debug', (msg) => {
// console.log(`DEBUG: ${msg}`)
})
// Lance le serveur tika
return ts.start().then(() => {
// Pour chaque url ...
return Promise.reduce(urls, (db, url) => {
// Extraction du texte.
return getPdf(url).then((pdf) => {
// console.log('pdf', pdf)
if (pdf) {
return ts.queryText(pdf).then((data) => {
// console.log(data)
const code = /CODE : ([^\n]*)/.exec(data)[1]
console.log('Code :', code)
return db
})
} else {
return db
}
})
}, { test: 42 }) // crée une base de données avec assoication test = 42. Mettre {} pour initiliser la db comme une DB vide.
}).then((db) => {
return ts.stop().then(() => db)
}).catch((err) => {
console.log(`TIKA ERROR: ${err}`)
})
}
// Analyser du html
// DOc : https://github.com/cheeriojs/cheerio
// ou encore : https://github.com/sfrenot/competence/blob/master/formation/crawl.coffee
const extractUrlPdfs = (url) => {
return getHtml(url).then((html) => {
const $ = cheerio.load(html)
const urls = $('#block-system-main .content-offre-formations table a').map(function () {
return $(this).attr('href')
}).get()
// console.log('urls:', urls)
return urls
})
}
extractUrlPdfs('https://www.insa-lyon.fr/fr/formation/parcours/729/4/1').then(console.log)
downloadAndAnalysePdf().then((db) => console.log(JSON.stringify(db, null, 2)))
// Créer une base de données
const db = {}
// Écrire dans la base de données
db['code'] = {
a: 1,
b: 2
}
// Afficher le contenu d'une variable en json
console.log(JSON.stringify(db, null, 2))