File tree Expand file tree Collapse file tree 3 files changed +120
-0
lines changed
Expand file tree Collapse file tree 3 files changed +120
-0
lines changed Original file line number Diff line number Diff line change 1+ const cheerio = require ( 'cheerio' )
2+ const fetch = require ( 'node-fetch' )
3+
4+ const toJson = require ( './utils/tojson' )
5+
6+ const defaultOptions = {
7+ url : undefined ,
8+ html : undefined ,
9+ selector : 'table'
10+ }
11+
12+ const html = async ( options , headers ) => {
13+ const { url, html, selector } = { ...defaultOptions , ...options }
14+
15+ let data
16+
17+ if ( url ) {
18+ const response = await fetch ( url )
19+ data = await response . text ( )
20+ } else if ( html ) {
21+ data = html
22+ }
23+
24+ const $ = cheerio . load ( data )
25+
26+ let body = toJson ( $ , 'table' , headers )
27+
28+ console . log ( body )
29+ }
30+
31+ html (
32+ {
33+ html : `
34+ <table style="width:100%">
35+ <tr>
36+ <td>Jill</td>
37+ <td>Smith</td>
38+ <td>50</td>
39+ </tr>
40+ <tr>
41+ <td>Eve</td>
42+ <td>Jackson</td>
43+ <td>94</td>
44+ </tr>
45+ </table>
46+ `
47+ } ,
48+ [ 'Name' , 'LastName' , 'Age' ]
49+ )
Original file line number Diff line number Diff line change 1+ const map = ( arr1 , arr2 ) => {
2+ if ( arr1 . length === 0 ) {
3+ return arr2
4+ }
5+
6+ return [ ...arr1 ] . map ( ( _ , i ) => {
7+ if ( ! arr2 [ i ] ) {
8+ return arr1 [ i ]
9+ }
10+
11+ return arr2 [ i ]
12+ } )
13+ }
14+
15+ module . exports = map
Original file line number Diff line number Diff line change 1+ const map = require ( './map' )
2+ const toJson = ( $ , tableSelector , _header ) => {
3+ const body = [ ]
4+ let header = [ ]
5+
6+ // Add headers from table to header array
7+ $ ( `${ tableSelector } th` ) . each ( ( _ , el ) => {
8+ header . push (
9+ $ ( el )
10+ . text ( )
11+ . trim ( )
12+ )
13+ } )
14+
15+ // Compare table header to header given
16+ if ( _header ) {
17+ header = map ( header , _header )
18+ }
19+
20+ if ( header . length === 0 ) {
21+ throw new Error (
22+ 'The table do not have any headers (<th></th>), please provide header tag as a second arguement'
23+ )
24+ }
25+
26+ let d = { } ,
27+ j = 0
28+
29+ // For tds in table
30+ $ ( `${ tableSelector } td` ) . each ( ( _ , el ) => {
31+ let val = $ ( el )
32+ . text ( )
33+ . trim ( )
34+
35+ if ( ! isNaN ( parseFloat ( val ) ) ) {
36+ val = parseFloat ( val )
37+ }
38+
39+ if ( val == '' ) {
40+ val = 0
41+ }
42+ d [ `${ header [ j ] } ` ] = val
43+
44+ if ( j == header . length - 1 ) {
45+ body . push ( d )
46+ j = 0
47+ d = { }
48+ } else {
49+ j ++
50+ }
51+ } )
52+
53+ return body
54+ }
55+
56+ module . exports = toJson
You can’t perform that action at this time.
0 commit comments