Avatar billede Jørgen Kirkegaard Professor
07. december 2018 - 14:12 Der er 6 kommentarer og
1 løsning

powershell -hent indhold af en hjemmeside.

Jeg skal bruge indholdet af en hjemmeside til videre behandling i Access/VB. Jeg skulle mene, at det nemmeste var at lave et DOS-batch-job, som henter hjemmesiden. Hertil ville jeg så bruge powershell. Jeg har tidligere haft held med denne løsning, når jeg skulle hente en fil fra nettet. Her brugte jeg powershell -wget.
Hvad skal jeg bruge, når jeg skal have selve indholdet af hjemmesiden? Et eksempel kunne være:
https://www.whois.com/whois/staticdata.dk
Avatar billede Hans Mester
07. december 2018 - 14:46 #1
$x = Invoke-WebRequest 'https://www.whois.com/whois/staticdata.dk' -UseBasicParsing

html-delen kan du nu hente ud:
$x.Content

wget er et alias for invoke-webrequest, dvs. samme kommando.
07. december 2018 - 15:18 #2
HEJ,

Hvor meget af siden skal  du bruge ?

Er det den bagved liggende kode , kan den være vanskelig at få fat i  (der er vel en grund til at programmører beskytter deres kode !), men er det "kun" det, som præsenteres på selve siden, kan du gøre følgende:

1:  Anbring din Cursor et sted hvor  du ikke er ind i en boks, eller lignende:

2: HØJRE klik med musen.

3: I den pop-up som kommer (fremkommer hvis siden ikke er "protected" ) er det første punkt GEM SIDE SOM og klikker du her, henter du HTML-koden (= sideindholdet) til din PC.

4: GEM Filen som et genkendelig navn (browseren foreslår selv sidens navn) og det kan være en fordel i visse situationer at du bruger sidens-navn.  og HUSK NAVNET .... !  (ellers skal du på'n igen!)

5:  BRUG Windows søgefunktion til at finde filen og kopier den og tilhørende mappe) over i en  anden mappe - lettere tilgængelig!

6:  Happy "HTML-leing"

7:  VOILA  (= Bingo!)

KR
Avatar billede Jørgen Kirkegaard Professor
07. december 2018 - 15:18 #3
Åh ja, jeg får html-kode ud. Jeg havde håbet på at få tekst-data, som jeg umiddelbart kunne læse.
Avatar billede Hans Mester
07. december 2018 - 15:43 #4
Det kan vi godt finde frem til...

if($x.Content -match '(?is)<pre class="df-raw" id="registryData">(.*?)</pre>') {
    $text = $matches[1] # din tekst
}
Avatar billede Jørgen Kirkegaard Professor
07. december 2018 - 15:44 #5
Jeg skal køre det i et program, så jeg kan ikke bruge copy'n'paste.
Avatar billede Jørgen Kirkegaard Professor
07. december 2018 - 15:56 #6
Hans - kan du omskrive det til noget powershell, som jeg kan køre fra DOS? Jeg er ikke med på "$"-variable, som jeg ikke bruger i Access-moduler.
Avatar billede Hans Mester
07. december 2018 - 16:57 #7
Du kan blot fjerne variablen, så siver det ud til kommandoprompten. Hvis det gemmes i "henttekst.ps1"

$x = Invoke-WebRequest 'https://www.whois.com/whois/staticdata.dk' -UseBasicParsing
if($x.Content -match '(?is)<pre class="df-raw" id="registryData">(.*?)</pre>') {
    $matches[1] # din tekst
}

så er kommandoen: powershell .\henttekst.ps1
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester