WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Vilken Scraping-teknik är bäst? (https://www.wn.se/forum/showthread.php?t=1047417)

Martin™ 2011-03-30 10:39

Vilken Scraping-teknik är bäst?
 
Vilken eller vilka metoder skulle du säga är bäst för att scrapa information från hemsidor?

1# Regex
2# XPath
3# Vet-ej-vad-den-heter*

Vet-ej-vad-den-heter*=
Citat:

"teknik för o skrapa sidor gjord i PHP5 som baserar sig på Curl samt en CSS selector motor liknande den i jQuery som gör att jag kan hantera buffern från curl anropet som vilken DOM baserad sida jag vill.. Ovanpå det hakar jag på en template motor för varje resturang site som definerar vad skrapen letar efter."

Magnus_A 2011-03-30 10:56

Beror helt på hur sidan ser ut och framförallt hur sidan ändras. Är det uppgifter som smyger in sig i långa textsjok kan regexp vara bättre och mer robust mot ändringar i omkringliggande text.
Handlar det om data strukturerad i tabeller och liknande är dom-baserade upplägg kanske bättre.
Viktigast är att du har bra varningssystem som talar om att sidan ändrats på ett sätt som gör att det är osäkert att du får ut rätt värden med din teknik.

emilv 2011-03-30 11:09

Definiera "bäst". Tänk efter vad som är prioriterat och välj den metod som passar bäst.

* Snabbt att skriva kod för varje sida
* Hastighet
* Minnesanvändning
* Processoranvändning
* Adapterbar, dvs passsar många hemsidor med så få ändringar som möjligt
* Automatiskt adapterbar, dvs letar själv upp vad som är rätt innehåll på sidan
* Många vitt skilda typer av sidor eller flera som liknar varandra?
* Pris (om du hyr in någon, annars tid)
* Inlärningströskel (om du gör det själv och inte har kunskapen)

Det finns säkert flera faktorer som spelar in i valet av teknik.

Bjorne 2011-03-30 12:19

XPath är bättre än att bara använda reguljära uttryck. I nyare versioner av XPath finns dessutom inbyggt stöd för reguljära uttryck så teknikerna står inte i motsatsförhållande till varandra. Teknik #3 som du nämner som använder sig av css-selektorer är sannolikt ett lager ovanpå XPath eftersom det är ganska lätt att konvertera css till xpathuttryck.

pelmered 2011-03-30 16:53

Jag har gjort en likande sak för något år sedan. Jag använde då cURL + regex, men jag vet inte om det är det bästa.

Det bästa och enklaste är väl att du antingen ansluter direkt till deras databas(vilket kanske inte är så troligt att du får) eller att de kan spotta ut informationen du vill i ett XML-dokument eller likande som du kan parsa med t.ex. SimpleXML. Du behöver ju ändå ha tillåtelse för att scrappa så det kanske inte är allt för svårt att fixa XML-lösningen om du kan fixa den åt dem. Det är den enklaste och den bästa lösningen i längden.
Jag har stött på en del problem när jag scrappat direkt ur HTMLen. Vissa sidor ändras ganska ofta och innehållet kan skilja väldigt mycket vilket gör att ditt skript då kommer misslyckas med att hämta datan. Det gör att du måste underhålla skriptet regelbundet vilket gör att du aldrig kan släppa det helt om det är viktigt att det fungerar.

emilv 2011-03-30 17:00

Citat:

Ursprungligen postat av ITisGood.se (Inlägg 20400347)
Du behöver ju ändå ha tillåtelse för att scrappa

Nej. Det är helt tillåtet att läsa av andras sidor. Hur man sedan använder informationen regleras bland annat av ifall den täcks av upphovsrätt, personuppgiftslag eller liknande. Men det finns dels andra användningsområden än att bara återpublicera det man läst in och dels material som inte faller inom upphovsrätten.

En seriös webbskrapare lämnar en identifierbar user-agent och respekterar robots.txt så att sajtägaren kan göra opt-out. Det är inte lag på det, men en god sed.

Clarence 2011-03-30 19:13

Citat:

Ursprungligen postat av Martin™ (Inlägg 20400255)
Vilken eller vilka metoder skulle du säga är bäst för att scrapa information från hemsidor?

1# Regex
2# XPath
3# Vet-ej-vad-den-heter*

Vet-ej-vad-den-heter*=

PHPQuery kan du nog titta på för #3.

Regex är krångligast men flexbilast. PHPQuery är väldigt enkelt att lära sig och de flesta har iallafall lite koll på hur det ska användas, de flesta med någon webberfarenhet har ju använt sig av jquery selektorer.

För andra språk, som t ex Python eller Java, finns rätt bra och mer utbyggda scraping bibliotek - men för PHP har iallafall inte jag hittat något intressant.

dAEk 2011-03-31 19:19

Utan att gå in på vad som är bäst tycker jag att någon form av parser som kan gå igenom DOM-trädet är att föredra. Skriver man en screen-scraper får man vara beredd på att sidorna ändras titt som tätt och då är det verkligen inge kul att sitta med en massa regex.

tartareandesire 2011-03-31 19:34

Citat:

Ursprungligen postat av dAEk (Inlägg 20400530)
Utan att gå in på vad som är bäst tycker jag att någon form av parser som kan gå igenom DOM-trädet är att föredra. Skriver man en screen-scraper får man vara beredd på att sidorna ändras titt som tätt och då är det verkligen inge kul att sitta med en massa regex.

Det bör väl påpekas att det inte är särskilt ovanligt med en inkorrekt html-struktur.

Clarence 2011-03-31 22:55

Citat:

Ursprungligen postat av dAEk (Inlägg 20400530)
Utan att gå in på vad som är bäst tycker jag att någon form av parser som kan gå igenom DOM-trädet är att föredra. Skriver man en screen-scraper får man vara beredd på att sidorna ändras titt som tätt och då är det verkligen inge kul att sitta med en massa regex.

Jag vet inte riktigt hur stor erfarenhet du har av scraping - men utifrån min erfarenhet är det tvärtom. Man blir mycket lättare beroende av korrekt och samma struktur i elementen om man kör en DOM parser snarare än en (lite öppen) regex. Däremot skriver jag mycket hellre en helt straight forward CSS selektor än pillar med bakåtreferenser osv. Däremot finner jag det omständigare än regex med de flesta sätten att traversera dom-trädet.

Det är från att ha haft igång scrapers för diverse funktioner över iallafall 5+ år mot ett bra antal väldigt olika källor. Sajter byter hela systemen oftare än de byter HTML:en lite för mycket i vilket fall, i min erfarenhet.


Alla tider är GMT +2. Klockan är nu 17:10.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson