Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Pitäs saaha parseroitua hivenen

Sivun loppuun

töheltäjä [08.10.2018 22:42:09]

#

Tarviis saada tuolta sivulta ensimmäiseltä riviltä missä tyyppinä esiintyy toto65, siltä riviltä olevasta linkistä 22 viimeistä merkkiä funktioon, jota voin käyttää osana konellee ladattavaa osoitette. Tarkoitus on saada käsiohjelmat lähdöistä automaattisesti taulukkolaskentaa. Tarkoitus on samalla metodilla saada myös toto76, tuo ensimmäinen rivi käy juurikin kun ajaa erikseen eli toto65 ti ja ke ja toto76 pe ja la.

Joskus olen jotain virittänyt mut nyt lyö totaalisen tyhjää.

groovyb [09.10.2018 10:16:43]

#

Puuttuuko tästä nyt jotain olennaista tietoa, kuten esim

* mistä sivustolta tietoa pitäisi saada parsittua
* millä ohjelmointikielellä
* missä export formaatissa (CSV?)
* Onko jotain lähdekoodia siis jo olemassa, kun viittaat johonkin riviin joka käy jossakin

töheltäjä [09.10.2018 13:21:57]

#

Okei. https://heppa.hippos.fi/heppa/racing/RaceCalendar.html tuolta sivu ja ne voi ottaa alas ihan vaan html:nä. Kielelläkään nyt ei niin suurta merkitystä ole. Scripti on tarkoitus ajaa windowsissa ajastettuna.

groovyb [09.10.2018 13:51:06]

#

Ok,

Mitä siis haluat tarkalleen ottaen. Onko käsiohjelma sama, kuin esimerkiksi tämän sivun sisältö: https://heppa.hippos.fi/heppa/app?page=racing/RaceResults&service=external&sp=CF1332280800000&sp=CEH

töheltäjä [09.10.2018 14:04:02]

#

https://heppa.hippos.fi/heppa/app?page=racing/RaceProgramOneRace&service=external&sp­=CF1539118800000&sp=CEH&sp=CC4 esimerkiksi tämä tuossa tuo numerosarja määrittää nähtävästi sen mitkä ravit ja lopussa olevalla CC4, mistä lähdöstä on kysymys.

Siitä syystä siitä aluperäisestä pitäsi saada tuo numerosarja funktioon jonka sitten voi ympätä ladattaviin osoitteisiin.

Lebe80 [09.10.2018 14:26:13]

#

Käviskö tuohon joku valmis palvelu?

Esim.

ParseHub
https://www.parsehub.com/

Vai onko tarkoitus nimenomaan harjoitella parsimista?

töheltäjä [09.10.2018 14:38:32]

#

Tarkotus on saada vaan noi käsiohjelman tiedot koneelle automaattisena ei muuta. Mielestäni tuossa ei olisi ihmeemmin parsimista ainoastaan osoitin kohtaan Toto65 ja tietysti toissessa versiossa joka ajetaan eri päivänä Toto76. Seoraavaksi pitäsisi päästä siirtymään samalla rivillä olevaan linkkiin, josta talteen vaikkapa 22 viimeistä merkkiä. Näitä 22 merkkiä käytetään sitten latauslinkkien muodostukseen tyyliin https://heppa.hippos.fi/heppa/app?page=racing/RaceProgramOneRace&service=external&sp=($a)&sp­=CC4.

groovyb [09.10.2018 15:02:30]

#

Tässä esimerkki nodejs:llä (asenna npm:llä ylimääräiset paketit request ja node-html-parser)

Koodi tsekkaa läpi käsiohjelmasisällöt, ja kopioi niistä ylläolevan antamasi linkin mukaan erillisellä tunnuksella html:t.
tuloksena siis läjä html filuja samassa kansiossa jossa pätkä ajetaan

var request = require("request");
var parse = require('node-html-parser').parse;
var fs = require('fs');

request({
    uri: "https://heppa.hippos.fi/heppa/racing/RaceCalendar.html",
  }, (error, response, body) =>  {
        if(error) {
            console.log('virhe nyyh: ' + error)
        } else {
            try {
                const page = parse(body, {script: false})
                const links = page.querySelectorAll('a');
                links.forEach((item) => {
                    if(item.attributes['href'].match(/sp=/)) {
                        let link = item.attributes['href'].split('sp=')[1]
                        //Parsitaan ylimääräinen & merkki pois saadusta tunnisteesta
                        link = link.substring(0, link.length - 1)
                        request({
                            uri: `https://heppa.hippos.fi/heppa/app?page=racing/RaceProgramOneRace&service=external&sp=${link}&sp=CEH&sp=CC4`,
                          }, (error, response, body) =>  {
                             if(!body.match(/Tilanteen raportoiminen/)) {
                                let kasiohjelma = parse(body).querySelector('.race_program')
                                // Jätetään kirjoittamatta ne, jonka käsiohjelmasta ei löydy sisältöä, eli joissa palautunut html ei sisällä datarivejä race_program taulusta
                                if(kasiohjelma.childNodes.length > 3) {
                                    fs.writeFile(`${link}.html`, body)
                                }
                             } else {
                                 console.log(`tiedolle ${link} ei löydy sisältöä`)
                             }

                          })
                    }
                })
            }
            catch(ex) {
                console.log('virhe parsiessa')
            }
        }
  });

töheltäjä [09.10.2018 15:07:05]

#

Upeeta ja kiitoksia pitää illalla testailla.

töheltäjä [09.10.2018 20:50:38]

#

Äkikseltään vaikuttas toimivan muuten paitsi, että hakee turhaa 13.10 päivän. Tarkoitus oli et pelkästään sen ensimmäisen kohdalta ja sen tulevan htlm-tiedoston vois nimetä vaikka lahto1 sitten joutuu lisäämään noita =CC4,CC5,CC6...CC9 asti eli kuusilähtöä.

Lisäys: sekä taitas riittää et tulostas pelkästään tuon tablen race_program

groovyb [10.10.2018 09:48:57]

#

Joo en tuota tosiaan viimeistellyt mitenkään :D
Siitä vaan muuttelemaan koodia niin saat haluamasi lopputuloksen!

töheltäjä [10.10.2018 13:00:46]

#

Jep, mut taitaa jäädä multa tekemättä se mitä alkuperäisesti haen eli markkelina tyyppi sarakkeesta Toto65 ja samalta riviltä haetaan se 22 merkkiä linkistä.

töheltäjä [10.10.2018 19:23:10]

#

Kun se pitäs mennä sen tekstin mukaan eli otetaan se toinen Toto76 ja sen kohtalta sitten linkin loppuosaa sen 22 merkkiä??? Mä en saa mitään järkevää toimintaa tuossakaan aikaan.

Lisäys: Helpatkaa nyt vanhusta....

groovyb [10.10.2018 21:27:04]

#

en tajua mitä tarkoittaa 22 merkkiä linkistä, tuo yksilöivä tunniste ei ollut 22 merkkiä pitkä. Täällä lähinnä autetaan toisia ratkaisemaan ohjelmisto-ongelmia, ei niinkään tekemään valmista softaa tilauksesta.

Toki valmiin sovelluksenkin saat takuuvarmasti (ja arvioisin että melko edullisesti), jos tilaat sen vaikka joltain ohjelmistoputkassa kehittäjältä!

töheltäjä [10.10.2018 21:43:06]

#

Tarkotan kun https://heppa.hippos.fi/heppa/racing/RaceCalendar.html sivulla on sarake tyyppi siitä haitaan nyt vaikka ensimmäinen Toto76 ja siltä riviltä siitä linkistä viimeisen 22 merkin avulla tehdään se latausurl.

groovyb [10.10.2018 21:48:47]

#

Onko jokin erityinen syy, ettet lisää noita tarvittavia CC4 ja CC5 osuuksia ton esimerkin hakuosoitteeseen

//Tämän loppuun, tässä on hakuosoite josta nuo tiedot haetaan
uri: `https://heppa.hippos.fi/heppa/app?page=racing/RaceProgramOneRace&service=external&sp=${link}&sp=CEH&sp=CC4`,

töheltäjä [10.10.2018 21:57:18]

#

noi cc4, ja cc5 .... on lähtönumeroita niitä toki tarvitaan latuksessa lataan jokaisen lähdön sitten omana tiedostona erikseen ja tosiaan se pitäsi saada tyyppi sarakeen Toto76 ja tai Toto65 kohdalta samalta riviltä sen linkki loppuosa jolla sitten voi tehdä lataamisen koneelle. Tuon linkin lopussa oleva CEH muuttuu myös radoittaan nähtävästi tuo on vermon tunnus, mutta Toto76 ravit ei ole vermossa kun harvoin.

töheltäjä [11.10.2018 18:54:35]

#

Niin miten se nyt sitten menis????

groovyb [11.10.2018 20:04:46]

#

Jatkossa suosittelen muistamaan, että me ketkä täällä autetaan, ei suinkaan saada tästä palkkaa. Joten jos sinulla on kiire ja tarkat speksit, suosittelen ostamaan sovelluksen kehittäjältä. Lähtökohtaisesti myös valmiita koodeja on turha pyytää, niihin menee sen verran aikaa ellei kyse ole jostain pienestä pätkästä, että harva jaksaa sitä ilmaiseksi väkertää. On eri asia auttaa ohjelmistopulmassa, kuin tuottaa kokonaisuus ja opetella kaikki substansseista lähtien.

Tässä pikainen raapustus, varmasti on bugeja ja rumaa jälkeä, mutta tuottaa ulos taulut käsiohjelman lähdöistä, jos toto75 tai toto65. Linkit html:ssä eivät toimi, koska niiden href ei sisällä domainia. tämä tulisi lisätä hrefien alkuun jos haluaa niiden toimivan.

** EDIT **
Fiksasin tuon päivämäärän joka html filuissa oli viimeisen pvm:n mukaan. nyt on oikein.

Tämän enempää en jaksa tähän käyttää aikaa, jos on lisätarpeita, kannattaa joko tilata se, teettää kokonaan uudestaan jossain, tai opetella laajentamaan tuota itse.

var request = require("request");
var parse = require('node-html-parser').parse;
var fs = require('fs');


request({
    uri: "https://heppa.hippos.fi/heppa/racing/RaceCalendar.html",
  }, (error, response, body) =>  {
        if(error) {
            console.log('virhe nyyh: ' + error)
        } else {
            try {
                const page = parse(body, {script: false})
                const rows = page.querySelectorAll('tr');
                rows.forEach((r) => {
                    const cols = r.querySelectorAll('td')
                    let index = 0
                    var day = ""
                    cols.forEach((col) => {
                        if(index == 0) {
                            let val = parse(col.toString())
                            day = val.rawText
                        }
                        index++
                        if(col.toString().match('Toto76') || col.toString().match('Toto65')) {
                            const links = r.querySelectorAll('a');
                            links.forEach((item) => {
                                if(item.toString().match('Käsiohjelma ja lähtölistat')) {
                                    let kasiohjelmaURL = item.attributes['href']
                                    request({
                                        uri: 'https://heppa.hippos.fi' + kasiohjelmaURL
                                    }, (error, response, body) => {
                                        const kasiohjelma = parse(body, {script: false})
                                        let kasiohjelmaData = kasiohjelma.querySelector('.data')
                                        let kasiohjelmaLinks = kasiohjelmaData.querySelectorAll('a')

                                        kasiohjelmaLinks.forEach((klink) => {
                                            let name = day + '_' + klink.rawText.split(' ').join('').split('klo')[0]
                                            request({
                                                uri: 'https://heppa.hippos.fi' + klink.attributes['href']
                                            }, (error, response, body) => {
                                                const data = parse(body, {script: false})
                                                const kasiohjelma = data.querySelector('.race_program')
                                                fs.writeFile(`${name}.html`, kasiohjelma.toString())

                                            })
                                        })

                                    })
                                }
                            })
                        }
                    })
                })
            }
            catch(ex) {
                console.log('virhe parsiessa: ' + ex)
            }
        }
  });

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta