![]() |
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:
|
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. |
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. |
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.
|
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. |
Citat:
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. |
Citat:
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. |
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.
|
Citat:
|
Citat:
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. |
Bara en sån till synes enkel sak som att validera en e-postadress kräver att man läser uttrycket noga. Trots att formatet är spikat är uttrycket svårt att läsa och samtidigt lätt att tolka fel. Jag kan bara tänka mig hur en regex-scraper för dåligt Html-kodade sidor ser ut... Dom scrapers jag har skrivit har varit för olika privata projekt och jag har testat lite olika sätt att hämta ut informationen. Iofs är jag inte direkt bra på regex men man märker ganska snabbt om det kommer funka med uppdateringar i långa loppet.
Kanske hade jag otur med sajterna som jag läste av men jag tycker ändå att det gick upp för en att det inte är en fråga om utan när man behöver uppdatera koden. När den dagen är kommen vill man som vanlig dödlig helst inte sitta med avancerad regex. |
Citat:
|
Måste instämma att regex för det mesta är att föredra. Fördelarna uppväger definitivt eventuella nackdelar och är man hyfsat van blir det sällan alltför tidsödande.
Vilken teknik du än väljer så kan du vara säker på en sak nämligen att detta är inte en engångskostnad. Har du ett gäng scrapers igång så kommer du garanterat att behöva uppdatera dessa då och då. Det är tråkigt värre men inte mycket man kan göra åt det. |
Citat:
Jag verkar vara ganska ensam om att ogilla regex för den här typen av uppgifter. :eek: Vad har jag missat? |
Nej, du är inte ensam och jag tror inte du missat någonting alls. Jag skulle vilja se någon skriva en parser som parsar ut brödtexten ur alla inlägg till en tråd på wn.se. Med xpath är det en baggis.
|
Citat:
|
Citat:
|
Det svåra är inte att tolka en sida. Utan att få fram en sida efter diverse POST med viewstate, kakhantering och redirect.
|
Citat:
|
Citat:
Kompetenta programmerare kan gå igenom regex, men en total röra med xpath blir värre. |
Citat:
Kod:
//div[contains(@id, "post_message")]/text() |
Citat:
|
Citat:
Som tur är finns ju bibliotek som gör livet enklare för utvecklare. För .NET är HtmlAgilityPack och Fizzler två trevliga lösningar. De innebär att man kan använda API:t för det mesta men möjligheten att ställa XPath-frågor mot dokumentet finns fortfarande kvar. |
Citat:
Citat:
Forumbegränsning: meddelandet måste vara minst 10 tecken långt. |
Alla tider är GMT +2. Klockan är nu 12:41. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson