Nördvägen till en e-postenkät

Listan över presskontakter innehåller inga utskrivna e-postadresser utan bara en länk att klicka på.
Adresslista över presskontakter

Ett gäng presskontakter över hela landet skulle kontaktas för en e-postenkät, men det tog förstås emot lite för reportern då de 119 personerna stod listade på ett sätt som säkert är begåvat om det är en av dem man vill nå.

Vill man däremot mejla allihop så blir det ganska mycket handpåläggning – och förmodligen musarm – innan man tagit sig igenom hela listan. Det innebär att högerklicka på varje länk, spara e-postadressen i Urklipp, växla till e-postprogrammet, klistra in adressen i adressfältet, lägga till ett kommatecken och därefter växla tillbaka till webbläsaren igen. Och sedan upprepa den processen 119 gånger.

Och nog för att envishet är en journalistisk dygd, men det finns säkert bättre sätt att använda den på.

Använd i stället webbläsarens funktion för att visa den rena html-koden för sidan. I exempelvis Google Chrome högerklickar man och väljer ”Visa sidkälla”.

Kommandot "Visa sidkälla" återfinns i Chrome i högerklicksmenyn.
Menyvalet ”Visa sidkälla” i Google Chrome

I html-filen finns nu e-postadresserna i länktaggarna.

E-postadressen syns i html-taggarna i sidans källkod. Adressen är maskad.
E-postadresserna framgår av html-koden

Men det är fortfarande alldeles för mycket jobb att gå igenom hela koden och kopiera adresserna därifrån. I det här fallet var också sökresultatet uppdelat på sex olika undersidor, för att alla de 119 namnen inte skulle listas på en gång.

Vi behöver html-koden från de sex olika delsidorna. Det är fortfarande handpåläggning – men 6 (sidor) är betydligt mindre än 119 (namn). Kopiera alltså html-koden för de sex delsidorna och klistra in alla i ett textdokument (till exempel i Anteckningar).

Därefter gäller det att lyckas extrahera själva e-postadresserna ur detta sammelsurium av information. Det perfekta verktyget för sådant arbete är reguljära uttryck. Man kan säga att det är ett språk som man använder för att beskriva texter. Reguljära uttryck finns inbyggda i många programmeringsspråk och flera textredigerare. I vårt fall använder vi programmet RegexBuddy som är specialgjort för arbete med reguljära uttryck. Det kostar drygt 250 kronor och finns inte i någon gratis testversion. Däremot skriver de att man får pengarna tillbaka om man inte är nöjd.

Det finns tre viktiga avdelningar i RegexBuddys gränssnitt som du behöver ha koll på: där du skriver in ditt reguljära uttryck, där du klistrar in din text och där resultatet presenteras.
Gränssnittet i RegexBuddy

Klistra in koden i rätt ruta – så kan vi sätta igång och skriva in vårt reguljära uttryck! Det låter kanske avskräckande, men är inte så krångligt som det låter. Eftersom en e-postadress är något man ofta behöver känna igen i olika sammanhang, så finns ett sådant reguljärt uttryck redan färdigt i programmets bibliotek. I rutan nere till vänster finns fliken ”Library”. Scrolla ner i listan så hittar du e-postadresserna. Jag valde en som hette ”Email address: RFC 2822 (specific TLDs)”. Dubbelklickar du på den, så dyker den upp i rätt ruta, och nere till höger ser du att e-postadresserna valts ut. I rutan där du klistrat in html-koden är e-postadresserna markerade särskilt.

Sökresultaten listas i rutan längst ner till höger - dessvärre kommer varje adress två gånger.
Sökresultaten listas dubbelt

Orsaken hittar vi i html-koden: varje e-postadress listas faktiskt två gånger: en gång som värde åt ett title-attribut och en gång som värde åt href-attributet. Om vi kollar lite noggrannare ser vi att adressen i det senare fallet alltid föregås av ”mailto:”. Knepet är alltså att till exempel se till att man bara får en träff de gånger då e-postadressen föregås av den texten.

Vi kan inte bara skriva in ”mailto:” före uttrycket för e-postadressen – i så fall skulle ju ”mailto:” ingå i sökresultatet, och poängen från början var ju att få adressen så ren som möjligt. Knepet är i stället att skriva in ”(?<=mailto:)” (utan citattecken!) allra först i det reguljära uttrycket. Det betyder att vi vill titta tillbaka och se om uttrycket efter ”?<=” finns före vår träff – och bara då vill vi ha sökresultatet. Frågetecknet indikerar att ett särskilt kommando följer, ”<” kan ses som en vänsterpil som pekar tillbaka, och likhetstecknet anger att det ska vara lika. (Vill vi i stället titta framåt, och kolla så att något står efter vår träff, släpper vi pilen och får i stället ”?=”.) Nu får vi bara enkla träffar.

Nu kan vi bara kopiera e-postadresserna från listan och klistra in dem där vi vill ha dem. Vill vi ha en lista där alla adresserna kommer på en rad och är separerade med kommatecken, använder vi bara en vanlig sök- och ersätt-funktion. Vi ska då ersätta tecknet för ny rad med ett kommatecken. Men hur ”skriver man in” ett ”Enter” i sökrutan i Anteckningar? Programmet är lite för simpelt för det, men i gratisprogrammet Notepad++ kan man använda särskilda koder för ändamålet. ”\r\n” är koden för ny rad i textfiler i Windows. Skriv in den, och välj att ersätta med kommatecken. Glöm inte att välja något av de utökade söklägena.

Sök- och ersätt-funktionen i Notepad++ klarar vissa koder. "\r\n" betyder ny rad i textfiler i Windows.
Sök- och ersätt-funktionen i Notepad++ klarar vissa koder

Klart! Om du känner till något bra gratisalternativ till RegexBuddy får du gärna höra av dig i kommentarerna.

Uppdatering: @fluffis rekommenderar programmet The Regex Coach och Janne rekommenderar Regexpal.

8 reaktioner till “Nördvägen till en e-postenkät”

  1. Det finns också flera onlinetjänster för regular expressions, t ex RegexPal: https://regexpal.com/

    Jag rekommenderar också att kika på vad som går att göra i Chrome Developer Tools/Firebug; i rätt händer o sammanhang kan de vara oerhört kraftfulla, ffa då en vanlig regex inte räcker eller då man vill veta exakt hur och vilken data som skickas till/från en webbplats.

  2. Med verktygen inbyggda i varenda UNIX-dator (dvs din mac på skrivbordet):
    (nej, om du inte förstår det här ska du nog fråga nån som kan först. Man ska inte köra saker som man inte begriper. Inte för mycket i alla fall.
    I en terminal, kör: (du kan så klart byta ut websidan till nåt annat)
    wget -q -O – https://www.skl.se/kommuner_och_landsting/regionala_forbund | \
    awk -F\” ’/mailto/ {
    ix=1 ;
    while ( ix < NF ) {
    if ( $ix ~ /mailto/ ) {
    split($ix, delar, /:/);
    print delar[2];
    };
    ix++;
    };
    };'

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *