WN

WN (https://www.wn.se/forum/index.php)
-   Allmänt (https://www.wn.se/forum/forumdisplay.php?f=2)
-   -   Skapa egen prisagent (https://www.wn.se/forum/showthread.php?t=5191)

N!cklas 2004-12-27 22:08

Har en liten idé om ett ämne som skulle ha nytta av en prisagent typ prisjakt, kelkoo osv. Har inte en aning om hur jag kodar den själv, så den möjligheten är borta... Är det någon som har koll på hur de får in sina priser? Har läst att en del sker genom csv-filer eller liknande, men de har även spindlar/agenter som går över sajter och hämtar de uppgifter de vill ha. Var kan man hitta mer info om denna typ av spindel/agent?
Tacksam för alla svar...som berör ämnet ;-)

Jawn 2004-12-27 22:47

Kan använda regex (Regular Expressions) om du vill.

http://gnosis.cx/publish/programming...pressions.html

N!cklas 2004-12-27 22:59

Tack för tipset! Tyvärr fattade jag inte mycket av det jag läste... så jag får läsa vidare och klura lite

Tar gärna emot fler tips

PeterM 2004-12-28 07:37

Ah, ett ämne jag har en del insikt i.

Prisuppgifter hämtas precis som du hört antingen via prislistor som företaget tillhandahåller eller genom att man skickar en spindel/crawler/agent (kärt barn...) att läsa av sidor i företagets webshop. För att få med så många företag som möjligt så måste man antagligen använda båda metoderna, fördelningen för de olika metoderna är för Buggys del ungefär 50-50.

Större företag är vanligen bra på skapa och ge tillgång till prislistor som är enkla att läsa av automatiskt. Mindre företag saknar tyvärr ofta teknisk kompetens för detta, eller har så dålig struktur på sina databaser att de data man kan plocka ur dem är oanvändbar. Skräckexemplet är företag som inte använder någon databas, utan har använt Word för att skapa sidor till sina webshoppar. Den "html" som Word genererar kan man bli blind av...

Det finns en hel del att läsa om agentteknik, men det mesta är av helt akademisk natur. En agent är ett program som vilket annat som helst och inte särskilt märkvärdigt. De går att koda i vilket språk som helst, men vissa språk är givetvis bättre lämpade än andra. Agenter måste specialkodas för sitt syfte. En all-in-one agent som kan hantera allt från begagnade bilar till väderprognoser finns inte. Någon egentlig intelligens har de givetvis inte, utan reagerar bara på de data de behandlar utifrån villkor man ställer upp. Vissa menar att en agent ska ta egna initiativ för att vara en "egentlig" agent. Om du till exempel startar ditt mailprogram och kollar din mail varje vardag under lunchen så skulle en agent kunna notera det och fråga om du vill automatisera det.


En crawlers/agents datainhämtning är enkel att beskriva med lite pseudo-kod. Kan givetvis göras på tusen andra sätt.

[Start]
Definiera en startadress.
Definiera vad som utgör intressant data (ofta med hjälp av regexp, precis som Jawn skriver i sitt inlägg).
Definiera hur länkar att följa ska se ut (regexp även här).

[Inledning]
Sidan på startadressen hämtas.
Identifiera och spara intressant data.
Identifiera och spara länkar att besöka härnäst.

[Loop]
Hämta sida från lista över adresser.
Identifiera och spara intressant data.
Identifiera och spara länkar att besöka härnäst.
[/Loop]

[Slut]
Avsluta när listan över adresser att besöka är tom eller något annat villkor är sant.


Det var grundkursen i alla fall. :)

Helix 2004-12-28 08:26

Välkommer Peter! Trevligt att ha dig i forumet.

N!cklas 2004-12-28 09:12

Peter - det var nog det mest uttömmande svar jag någonsin fått på ett forum!! Tack!

Instämmer med MusikGuru att det är trevligt att ha dig här. Buggy är ett
givet bokmärke och en sajt att besöka så fort man ska handla dataprylar

jimmie 2004-12-28 10:16

Som det redan har omtalats här så är det regular expressions som gäller. Jag rekomenderar PCRE (Perl Compatible Regular Expressions) för de är effektivare. Jag skulle rekomendera att om du vill göra allt så optimerat som möjligt att du köper en bok som tar upp ämnet regular expressions.

Om man vill skapa en tjänst likt pricerunner så _måste_ man kan regular expressions. Dels för att hämta prisinformationen och dels för att kunna hämta produktinformationen från tillverkarens hemsida. Mycket energi måste också läggas på felhantering så att ett litet fel inte förstör hela uppdateringen.

Kan också berätta att jag är i fasen att utveckla en prisagent. Har tidigare gjort en prototyp i ASP men nu ska jag göra en "live" version i PHP. Jag har domänerna prisagent.com och prisagent.se

Får jag fråga vilket språk buggys agent är i? Vet att hemsidan är i PHP men tänkte kanske att agenten var skriven i något "vanligt" programmeringsspråk som t.ex. Delphi eller C++.

PeterM 2004-12-28 15:39

Buggy använder PHP till precis allt. Prestanda skulle kunna förbättras med ett språk som kompileras, men slipper jag hela kompilerings-cykeln så tar jag gärna en prestanda-hit. En normal refresh av samtliga priser tar ändå inte mer än fem minuter, och då är det oftast nätverket som är flaskhalsen.

grazzy 2004-12-28 16:54

För att ge mig in i debatten ;)

Jag måste avråda något från att använda regexp då det är betydligt svårare att definera bra regexp (såvida man inte är superduperduktig på det, och då har jag ändå sysslat med regexps etc i nästan fyra år). Istället finns det för framförallt Perl superbra verktyg för att parsa just HTML.

Verktyget som jag använder är HTML::TokeParser på http://search.cpan.org/~gaas/HTML-Parser-3...L/TokeParser.pm

Nu är det kanske inget alternativ om man inte vill lära sig perl, men för dem med möjligheter till det så rekommenderar jag verkligen den här metoden över tex att parsa själv med regexp av flera anledningar.

- Tiden det tar att utveckla.
- Stabiliteten, om du skriver ett script som läser alla <a>-taggar så kan du vara säker på att det alltid funkar även om tex en tagg inte är stängd.
- Flexibiliteten.

Mina .2 kronor.

PeterM 2004-12-28 22:43

Alla sätt är bra, osv. För egen del har jag inte ens skrivit någon parser utan kastar bort precis all html förutom just länkar i ett första pass. I andra passet identifieras priser och i tredje passet slås priser samman med produktnamn och annan tillgänglig data till en produkt att lägga in i databasen. Jag behöver sällan över 10 rader kod för att åstadkomma detta.


Alla tider är GMT +2. Klockan är nu 21:21.

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