Oppskrift for å hente ut dine teorier til Excel


Myheritage har innført «Theory of Family Relativity™» (TOFR) og skal man jobbe systematisk med listen kunne det vært kjekt å få tilsendt bare disse. Denne muligheten finnes ikke så jeg har lagd en måte å automatisere dette med en teknikk som kalles webscraping. PS Teoriene er basert på smart macthes og delt dna, og er bare forslag. Siden disse kan være feil er det lurt å undersøke om denne «jukse-metoden» har noe hold. «Juks» siden de bruker Big-data for å forsøke å låse slektsgåten for deg automagisk, for vil vi slektsforskere egentlig få fasiten utlevert?


NB ADVARSEL OG ANSVARSFRAKRIVELSE!

Oppskriften er teknisk og jeg kommer ikke til å drive mye gratis support for at du skal få dette til om du ikke forstår min oppskrift. Pga personvern og generell datasikkerhet kan jeg heller ikke teste dine data for å finne feil, eller optimalisere uthentingen for deg. Jeg tar heller ikke noe ansvar for problemer du kan havne i ved feilbruk. Ikke hent ut listen hundre ganger om dagen, du kan bli utestengt fra MyHeritage i kortere eller lengre tid hvis du bombarderer websiden deres. med forespørsler.... Du er herved advart.  

Forarbeid

  1. Først må du ha en nettleser som støtter bruk av chrome utvidelser. Dette kan være Chrome, Microsoft Edge, Opera eller andre. (Finnes også en firefox add-on for dere som bruker firefox)
  2. Gå til Webscraper.io og last installer utvidelsen (se bilde under)
Bilde 1 – Installer chrome utvidelse

Tilpassning av definisjonsfilen

Man kan lage sine egne JSON «definisjonsfiler» for uthenting. Jeg brukte litt tid på å lære dette og hvordan man kan redigere disse enklere. Det er lett å gjøre noe feil og jeg startet pånytt mange ganger før jeg fant en enklere måte, nemlig redigere i selve definisjonsfilen. Det er lett å rote til denne om man er unøyaktig. For å spare deg for å lære hele «opplegget» skal jeg forsøke å fortelle om det viktigste man bør kunne endre. NB Hele teksten nedenfor må kopieres og redigeres før du bruker den.

{
	"_id": "mh_tofr_flere",
	"startUrl": [
		"URL1",
		"URL2"
	],
	"selectors": [
		{
			"id": "DNA person",
			"type": "SelectorText",
			"parentSelectors": [
				"_root"
			],
			"selector": ".profile_selector span",
			"multiple": false,
			"regex": "^([^,])+",
			"delay": 0
		},
		{
			"id": "Kit",
			"type": "SelectorText",
			"parentSelectors": [
				"_root"
			],
			"selector": ".selector_header span.detail_value",
			"multiple": false,
			"regex": "",
			"delay": 0
		},
		{
			"id": "DNA treff",
			"type": "SelectorElement",
			"parentSelectors": [
				"_root"
			],
			"selector": "div.card_container",
			"multiple": true,
			"delay": 0
		},
		{
			"id": "Navn",
			"type": "SelectorText",
			"parentSelectors": [
				"DNA treff"
			],
			"selector": "a.profile_name",
			"multiple": false,
			"regex": "",
			"delay": 0
		},
		{
			"id": "Alder",
			"type": "SelectorText",
			"parentSelectors": [
				"DNA treff"
			],
			"selector": "div.detail_property:nth-of-type(1) span.detail_value",
			"multiple": false,
			"regex": "",
			"delay": 0
		},
		{
			"id": "Land",
			"type": "SelectorText",
			"parentSelectors": [
				"DNA treff"
			],
			"selector": "span.country_property_value",
			"multiple": false,
			"regex": "",
			"delay": 0
		},
		{
			"id": "Estimert slektskap",
			"type": "SelectorText",
			"parentSelectors": [
				"DNA treff"
			],
			"selector": "span.possible_relationships_text",
			"multiple": false,
			"regex": "",
			"delay": 0
		},
		{
			"id": "cM ",
			"type": "SelectorText",
			"parentSelectors": [
				"DNA treff"
			],
			"selector": ".match_quality_value_inner span[data-automations]",
			"multiple": false,
			"regex": "",
			"delay": 0
		},
		{
			"id": "Delt %",
			"type": "SelectorText",
			"parentSelectors": [
				"DNA treff"
			],
			"selector": "span[data-automations='QualitySharedDnaPer']",
			"multiple": false,
			"regex": "",
			"delay": 0
		},
		{
			"id": "Segmenter",
			"type": "SelectorText",
			"parentSelectors": [
				"DNA treff"
			],
			"selector": ".shared_segments span.match_quality_value",
			"multiple": false,
			"regex": "",
			"delay": 0
		},
		{
			"id": "Største",
			"type": "SelectorText",
			"parentSelectors": [
				"DNA treff"
			],
			"selector": ".largest_segment span[data-automations]",
			"multiple": false,
			"regex": "",
			"delay": 0
		},
		{
			"id": "Tre",
			"type": "SelectorText",
			"parentSelectors": [
				"DNA treff"
			],
			"selector": "div.matched_family_tree_details",
			"multiple": false,
			"regex": "",
			"delay": 0
		},
		{
			"id": "DNA_ny",
			"type": "SelectorText",
			"parentSelectors": [
				"DNA treff"
			],
			"selector": "span.tag_uppercased",
			"multiple": false,
			"regex": "",
			"delay": 0
		},
		{
			"id": "Tofr_ny",
			"type": "SelectorText",
			"parentSelectors": [
				"DNA treff"
			],
			"selector": "span.new_badge",
			"multiple": false,
			"regex": "",
			"delay": 0
		}
	]
}

_ID

Tekst i hermetegn blir navnet på navnet på scraperen (uthenteren) som også blir navnet på csv fila som lages og kan importeres i Excel. Navnet kan endres når man importerer definisjonsfila, eller med «edit metadata» NB Navnet må skrives i små bokstaver

Start URL

Har man flere kit kan man velge å ha en uthenting for hvert kit til hver sin fil, eller hente alle etterhverandre til en fil. Skal du hente flere må hver URL være omsluttet av hermetegn og adskilles med komma. Har du bare ett kit fjern komma og «URL2».

"startUrl":["URL1","URL2"]

For å finne din TOFR URL må du gå til dine DNA treff og velge filter (Tredetaljer): Har Theory of Family Realtivity, Deretter må du opp øverst i nettleser og kopiere URL. Punkt 3 i bilde under. (Jeg har flere kit på min profil så jeg kan i tillegg til å velge person, kan jeg velge hvilket av disse jeg skal se på. MH kaller disse for sett på norsk)

Litt om hva du kan eller bør legge til URL

Eks på URL:

https://www.myheritage.no/dna/matches/342579121?filter=theories_of_family_relativity&p=1

NB! Din URL kan ha færre eller flere bestandsdeler. Forklaring på oppbygging er under. Hvert punkt tar opp ulike deler og dens betydning:

  • Tall etter /matches/ – Er ditt nummer
  • ? – alt etter spørsmålstegnet er paramtre
  • & – standard skilletegn for parametre
  • # – spesialtegn (anker) som må være foran dna-kit-nummer
  • filter=theories_of_family_relativity – filter for å få frem teoriene
  • &p=1 – Paginering start side er 1. Opprinnelig vises 10 treff pr side. Om man skriver &p=[1-10] skal man i teorien hoppe frem stegvis 1 side av gangen tom side 10. (10×10 = 100 treff skal hentes ut)
  • &ps=25 – parameter for visninger pr side – betyr at det skal vises 25 treff av gangen.
  • #dnamatch-D-93E7DFD3-8F57-4190-xxxx….2-88D386A19998 – Har du flere kit pr person må hver kit spesifiseres spesifikt utover den «første» i sett listen.
Rediger "startUrl":["URL1","URL2"] til noe ala  "startUrl":["https://www.myheritage.no/dna/matches/342579121?filter=theories_of_family_relativity&ps=25&p=[1-3]"] Du kan ha flere TOFR url'er adskilt av komma
Når jeg testet dette fikk jeg først ikke til å hente ut alle om jeg valgte paginering, ei heller om jeg valgte å øke antall pr side som visningsparameter. Jeg fikk noen ganger bare noen få av alle mine kit. Ved å øke tidsparameter fra 2.000 ms til 20.000 ms under kjøring fikk til slutt med alt. Det kan hende at paginering hadde virket om jeg økte tiden til 10.000 ms (10 sek). Jeg brukte bare &ps=150 fordi jeg hadde på det meste 130 TOFR. Lek derfor litt med hva som passer for deg. 

Selectors

Alle elementer som opplegget består av er basert på ulke valgte elementer på html siden. For de teknisk interesserte er dette css basert. feks div.navn betyr velg innholdet mellom <div class=navn»>…</div>. Merknad: Dersom klassen har navn som har mellomrom i seg er det siste leddet som skal brukes fordi » div.navn tekst» betyr <div class=»navn»><tekst>…</tekst></div> og ikke <div class=»navn tekst»>.

Import SITEMAP (definisjonsfila)

Aktiver utvidelsen ved å trykke F12 (jeg har valgt å ha vise disse nederst på siden). Klikk på fane «Web scraper» som vis i bilde nedenfor. Står det ikke Web Scraper har du enten ikke installert tillegget for Chrome, eller så har du ikke aktivert denne.

Klikk på Create new Sitemap, Velg Import Sitemap

Scrape – Uthenting

Se bilde over for hvor du starter innhenting av data. Etter at menypunktet er trykt så kommer en særdeles viktig del. Du skal angi hvor lenge nettleser skal vente på data og hvor lenge nettsiden skal få lov til å bruke før neste side hentes. Jeg la til 0 bak slik at tiden økte fra 2 sekunder til 20. Bedre å vente noen ekstra sekunder enn å ikke få med seg data.

En nettleser åpnes seg og du kan følge med på at den åpner nettsidene og går videre. IKKE LUKK DENNE ved å X’e den ut. Den lukker seg selv når den er ferdig. For å se hva som ble hentet ut, trykker du på refresh knappen

For å lagre må man velge «export data as csv». Deretter kommer en lenke du må trykke på. CSV filen lastes ved å trykke på lenken «Download now»


Virket ikke? – Juster og prøv igjen

Ble det noen krøll? Test deg frem med å øke antall sekunder som scraper skal vente. Om du vil endre på noen av parameterene og prøve igjen kan dette gjøres ved å velge «edit metadata»

Selector Graph viser logikken på ulike steg den bruker for å hente frem data.

Selector Graph: Grafisk oversikt på opplegget

Excel

Norsk versjon dessverre ikke lese csv filer direkte fordi vi i Norge og USA bruker komma og semikolon ulikt. Den enkleste måte å hente inn CSV filer er å bruke en import funksjon i Excel for CSV filer som ligger under menypunkt Data. Under importen kan man velge å manipulere data / fjerne kolonner som du ikke trenger. Dette viser jeg ikke. Bruksanvisningen er for lang allerede

Lær mer fra Youtube

Vil du lære mer se på en av disse videoene

Liste magi


Ofte når man jobber med DNA så jobber man med ulike former for lister. Enten fordi man samarbeider med slektninger og utveksler lister, eller fordi man administrerer DNA for flere og av den årsak har flere lister. Man kan bruke listene til å finne ut mer enn bare ved å se på sin egen lille liste isolert.

Nedenfor viser jeg deg Hvordan bruke excel til å jobbe for deg med å sortere ut forskjeller, eller likheter mellom 2 lister. (Jeg bruker Office 365 PC versjon). Fremgangsmåten er forenklet og veldig generell fordi ulike selskaper har ulik former på sine lister. (MyHeritage lister må bearbeides litt før de kan brukes*  Listen jeg bruker her, er ekstrem enkel.  (Denne bruksanvisning i pdf, med bilder + demofiler)

* MyHeritgage matchlister inneholder «ID for deg» – «ID for treffperson», Din ID må fjernes om du skal sammenligne lister fra ulike personer. Første linje ID hos MH kan se slike ut: D-52B0754F-8EFF-36AA-9B05-B56ACC6F359E-D-1E0A3A3A-85BC-45F6-A26F-D0A019615CDF, har markert ut hva som må bort.

Forutsetninger:

  • Excel
  • 2 filer av samme oppbygging
    • Excel filer eller filer med tabellarisk struktur (komma, semikomma, tab separert, eller fast feltlengde). Filene må ha kolonner og rader
ID;NAVN;cM
AE123;Dag Holte;1876
WD541;Runa Grøndahl;3560

Fremgangsmåte:

  1. Åpne excel
  2. Gå til data fanen. Velg rett å åpne rett filtype (dette eksempelet har csv filer)
  3. Velger «DNA_MOR.CSV», trykker «importer»
  4. Trykker «Last inn»
  5. Endrer navnet på arket til «Mor»
  6. Gjentar punkt 2-5 for «DNA_BARN.CSV»

Like i begge lister (morsslekt)

  1. Hent data, Kombiner spørringer, Slå sammen
  2. Velg
    1. Data kilder DNA_BARN, DNA_MOR
    2. Kolonne som skal være lik i begge (Klikk på tittelfelt for å aktivere)
    3. Sammenføy type:
      1. indre == like i begge
    4. Trykk ok. (Kan du ikke trykke ok, har du trolig glemt pkt 2. kolonne som skal være lik)
  3. Lukk og last inn (Du får nå nytt ark med det som er likt i begge lister)
  4. Gi arket nytt fornuftig navn (I dette eksempelet er ett naturlig valg å kalle det morsslekt)
  5. Endre navn på spørring ifra Merge1 til Morsslekt (høyreklikk på navn i spørringer i høyre marg, velg endre navn)

Farsslekt

Dersom man ikke har en far hvor er dennes slektninger?
Svar: De vil hovedsaklig være de som moren ikke har, men barnet har

Vi tenger å vite hvem er i listen til barnet, men ikke er felles med mora.

Gjør som over, men velg

  • kilde: DNA_BARN (først), Morslekt 
  • sammenføy type,  «Anti – bare rader i første»
  • lukk og last inn
  • Navngi arket og spørringen «Farslekt»

AUTOMAGI

Du har nå koblet ditt regneark til 2 eksterne datakilder.  Lagd 2 lister hvor du har delt inn slekta etter mor og far. Får du nye lister kall de det samme og overskriv de gamle listene. Sidene dataene ligger utenfor og er oppdatert, alt du trenger å gjøre i ditt regnerak er å gå til arkfane «Data» og trykk på ikon for Oppdater alt. (Mener bestemt at tastekombinasjonen Alt+F9 er hurtigtasten, for oppdatert alt)

Alle dine lister vil ha oppdatert seg i regnearket, helt automagisk.

En mulig utvidelse er å lage en masterliste for hver av dine dna personer. Om du døper om den nye lista til «person»_ny kan du ha en lignende spørring som ser om det er noen nye i listen og legge disse til i master listen. Hvordan du gjør dette er likt det du har gjort her, men du må velge Full ytre, og senere finne funksjonen fjern duplikater (menypunkt under Data)