|
| Downloade en html-fil hver time? Fra : MikeAir | Vist : 822 gange 20 point Dato : 24-01-15 15:46 |
|
Hey Kandu-brugere,
Jeg står i den situation at jeg skal holde øje med udviklingen på et forum(antal views), og har derfor brug for at downloade websitet(altså bare en enkelt html-fil) hver time, automatisk....
Siden som skal downloades( www.lydmaskinen.dk) kan ses uanset om man er logget ind eller ej..
Er der en smart måde jeg kan planlægge/automatisere det, så jeg slipper for manuelt at gøre det hver time?
Det skal bruges til et bachelor projekt, så jeg ville være SUPER taknemmelig for alle former for input..
Vh
Mike
| |
| Kommentar Fra : bentjuul |
Dato : 24-01-15 16:33 |
| | |
| Kommentar Fra : MikeAir |
Dato : 24-01-15 16:45 |
| | |
| Kommentar Fra : mig-selv |
Dato : 24-01-15 17:31 |
| | |
| Kommentar Fra : mig-selv |
Dato : 24-01-15 17:32 |
| | |
| Kommentar Fra : mig-selv |
Dato : 24-01-15 17:52 |
|
Citat holde øje med udviklingen på et forum(antal views), |
Kan du ikke bare ´hakke´ dig ind på koden til den tæller.
Du kan også bare tage et billede, istedet for at hente siden ned, hvis det bare er tælleren du skal holde øje med - men stadig med et macro program.
| |
| Kommentar Fra : MikeAir |
Dato : 24-01-15 17:54 |
|
Jamen problemet er at den skal gøre det automatisk over en tidsperiode, så jeg slipper for at sidde og gøre det manuelt hver halve eller hele time..
| |
| Kommentar Fra : Klaudi |
Dato : 24-01-15 19:30 |
| | |
|
Lav et cronjob ala dette her: Kode 0 * * * * wget http://www.lydmaskinen.dk |
Så henter den index.html hver time og tilføjer et .1 .2 .3 .4 osv. efter de forskellige versioner den henter
| |
| Accepteret svar Fra : EXTERMINATOR | Modtaget 20 point Dato : 24-01-15 20:59 |
|
Nu kiggede jeg lige lidt i kildekoden til siden, antal views fremgår ikke, mon det er hvor mange der er online du er ude efter?
Hvis det er så ville jeg lave et lidt anderledes cronjob, ala dette her:
Kode 0 * * * * wget -q http://www.lydmaskinen.dk -O - | grep 'In total there are <strong>' >> test.txt |
Så får du en fil der hedder test.txt hvor der er en (meget lang) linie for hver time med de tal du skal bruge
| |
| Kommentar Fra : MikeAir |
Dato : 24-01-15 21:25 |
|
Lyder præcist som det jeg leder efter.... Googlede mig lige frem til hvad et cronjob var, og det ser ud som om det er noget hvor man tilføjer automatiserede scripts til sitet? Kan det passe?
Mit problem er dog, at jeg ikke selv ejer websitet og derfor ikke selv kan ændre i koden på sitet.
(Har dog tilladelse fra ejeren til at bruge al information der ligger offentligt på forum'et i mit bachelor projekt)
Antal online brugere er en god ting at starte med ja - når jeg så har forstået konceptet kan jeg jo føre det videre til at gemme views på udvalgte topics.
Men kan jeg lave sådan et cronjob uden at ændre i koden på sitet? Og evt. køre det fra min egen computer eller webserver(har et domæne med php installeret f.eks.)?
| |
| Kommentar Fra : MikeAir |
Dato : 24-01-15 21:40 |
| | |
| Kommentar Fra : MikeAir |
Dato : 24-01-15 22:34 |
|
Har fundet ud at både at åbne editoren, lave cronjobs, og hvor filen bliver gemt...
Eneste problem er, at den fil der bliver gemt når jeg bruger nedenstående kode, er helt tom..
Kode 0 * * * * wget -q http://www.lydmaskinen.dk -O - | grep 'In total there are <strong>' >> test.txt |
| |
|
Ok, du er nået langt
Nu kører jeg ikke OS X men Mint så bær over med mig hvis nogen kommandoer ikke findes.
Åbn terminal --> skriv: wget -q http://www.lydmaskinen.dk og tryk på enter.
Læs indholdet af den hentede fil: less index.html
Hvis du kan læse selve html filen så går vi videre.
I terminalen skriver du nu: grep 'In total there are <strong>' og så skulle den gerne vise den linie du er interesseret i.
Når du tester cronjob kan du jo lave det om til at hente hvert minut til du er sikker på at det virker, du skal bare lave 0 om til en stjerne.
Altså * * * * * wget -q http://www.lydmaskinen.dk -O - | grep 'In total there are <strong>' >> test.txt
| |
|
Citat wget -q http://www.lydmaskinen.dk og tryk på enter. |
Måske vi lige skulle verificere at filen rent faktisk eksisterer:
ls i* og enter
Citat Læs indholdet af den hentede fil: less index.html |
| |
| Kommentar Fra : MikeAir |
Dato : 25-01-15 00:06 |
|
Efter at have googlet lidt mere finder jeg ud af at wget hedder curl på mac, og jeg har så fået den til at lave en htmlfil som den opdaterer hvert minut..
Kode */1 * * * * curl -r http://www.lydmaskinen.dk/index.php >> HTMLFIL.Html |
den sidste del, som blot henter den linje jeg er interesseret i:
Kode -O - | grep 'In total there are <strong>' |
Virker dog ikke på mac.. og jeg har ret svært ved at finde en mac-udgave af den...
Du har vel ikke en idé til hvordan jeg kan adskille hver "snapshot", så jeg kan importere dem i et program som SPSS eller excel, så jeg kan arbejde videre med dem som uafhængige observationer?
og fedt du gider hjælpe!
| |
| Godkendelse af svar Fra : MikeAir |
Dato : 25-01-15 00:07 |
|
Tak for svaret EXTERMINATOR.
| |
| Kommentar Fra : MikeAir |
Dato : 25-01-15 00:36 |
|
Hvis blot jeg kan få den til at adskille hver "download" med en ny linje, så er jeg faktisk helt i mål..
| |
|
Citat finder jeg ud af at wget hedder curl på mac |
Ikke helt rigtigt, curl er lidt noget andet end wget men her er det nok ligemeget.
Citat Virker dog ikke på mac.. og jeg har ret svært ved at finde en mac-udgave af den... |
grep findes helt sikkert på mac.
Du skriver: -O - | grep 'In total there are <strong>' som er lidt fra wget og næste kommando grep blandet i et.
Det jeg skrev var i dette format:
[Kommando1] Pipe [Kommando2] uddatatil [filnavn]
[Kommando1] | [Kommando2] >> [filnavn]
Kommando1 = det vi skal hente (med curl)
kommando2 = vi bearbejder det hentede (med grep)
Filnavn = vi gemmer det vi har bearbejdet
Du kan læse om grep her: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/grep.1.html
Det vi gør med grep er at finde den linie i kildekoden der indeholder teksten In total there are <strong>
Citat Du har vel ikke en idé til hvordan jeg kan adskille hver "snapshot", så jeg kan importere dem i et program som SPSS eller excel, så jeg kan arbejde videre med dem som uafhængige observationer? |
Kender intet til SPSS men med excel er det nemt, jeg giver dig et lille hint.
Hvis du laver tricket med et cronjob vil en OS X version der kører hvert minut se sådan her ud:
Kode * * * * * curl --silent "http://www.lydmaskinen.dk/index.php" | grep 'In total there are <strong>' >> HTMLfil.txt |
Åbn filen med excel og lav et par formler der kan finde de rigtige data, med grep får du en linie pr kørsel.
Du skrev: */1 * * * * curl -r http.....Ret morsomt. Første stjerne står får hvert minut så du behøver ikke at tilføje /1 (som også er hvert minut)
Havde du tilføjet f.eks /5 så der havde stået */5 * * * * så havde det betydet at den skulle køre hvert 5. minut.
Første stjerne = minut
Anden stjerne = time
Tredie stjerne = dato
Fjerde stjerne = måned
Femte stjerne = ugedag
| |
| Kommentar Fra : MikeAir |
Dato : 25-01-15 01:37 |
|
Grunden til */1 var fordi jeg læste i en guide på en af de utallige googling'er jeg har lavet idag..
Men TUSIND tak! Har lige kørt koden, og det virker perfekt, så jeg nu kan gå igang med at lave statistik på udviklingen over tid!
| |
|
Kode * * * * * curl -s http://www.lydmaskinen.dk/index.php >> HTMLFIL.txt |
> = opret/overskriv
>> = opret/tilføj
Så ovenstående burde hente hele siden (alle 4-500 linier) og tilføje dem til HTMLFIL.txt
Så kan du senere deleden ved at første linie altid er <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Så hver gang du når til den linie er det et nyt datasæt
Men det er nu stadig nemmere at bruge grep hvis det bare er online brugere du skal bruge. det er noget nemmere at håndtere i excel
| |
| Kommentar Fra : MikeAir |
Dato : 25-01-15 14:18 |
|
Super fedt!
Kan man få grep kommandoen til at hente et bestemt linje-nummer?
Hvis jeg nu vil hente antal views, fra en tabel hvor koden til hver række/kolonne minder så meget om hinanden at den ikke vil kunne kende foreskel på dem..
Hvis jeg for eksempel gerne vil holde øje med udviklingen i antal posts under "blogs" på forsiden:
http://www.lydmaskinen.dk/index.php
Den information gemmer sig på linje 334 i kildekoden, men da den er en del af en tabel med de samme resultater vil cron job'et jo nok ikke kunne kende foreskel.....
| |
|
Citat Kan man få grep kommandoen til at hente et bestemt linje-nummer? |
grep er en søgefunktion der kan finde tekst.
Du skal nok hellere bruge sed til det.
Kode * * * * * curl --silent "http://www.lydmaskinen.dk/index.php" | sed -n 334p >> HTMLfil.txt |
Problemet er så at linie 334 er denne her:
Citat <td class="row2" align="center" nowrap="nowrap"> |
Er det antal tråde du er efter er det sed -n 332p
Er det antal indlæg så er det sed -n 333p
Der er et grundlæggende problem med at gøre det på den måde, hvis nu der tilføjes noget til siden eller ændrer en lille smule på opsætningen, så får du ikke de data du regner med.
Nu ligner det ikke lige noget der ændrer sig ret tit eller ret meget så mon ikke det går.
| |
|
Nåe ja, hvis du vil have begge linier så kan du naturligvis også det.
sed -n 332,333p
| |
| Du har følgende muligheder | |
|
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.
Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
| |
|
|