Forum » Programiranje » parsanje podatkov iz strani
parsanje podatkov iz strani
bigbada ::
Zdravo.
Zanima me kako bi najlažje sparsal določene podatke iz neke strani? Recimo iz naslova www.imdb.com bi rad sparsal desno tabelo "Coming Soon" filme... Torej naslove. Kako se naj tega najlažje lotim, saj podobne stvari še nisem nikoli počel? Odprem "source" od strani in potem ven dobim? Kaj pa, če se source spreminja (v tem primeru mislim, da se ne). Ima kdo kakšen primer oz.bi znal pomagati? Delam pa v c#. Torej jaz si to predstavljam kot da iz tega dela sourca za stran pridobim ven naslove? Nekako bi moral dobiti zdaj ven naslove Deklinscina, Duhovnik,... A bi šlo to tako? Sploh nevem, če se prav lotevam ?
hvala
lp
Zanima me kako bi najlažje sparsal določene podatke iz neke strani? Recimo iz naslova www.imdb.com bi rad sparsal desno tabelo "Coming Soon" filme... Torej naslove. Kako se naj tega najlažje lotim, saj podobne stvari še nisem nikoli počel? Odprem "source" od strani in potem ven dobim? Kaj pa, če se source spreminja (v tem primeru mislim, da se ne). Ima kdo kakšen primer oz.bi znal pomagati? Delam pa v c#. Torej jaz si to predstavljam kot da iz tega dela sourca za stran pridobim ven naslove? Nekako bi moral dobiti zdaj ven naslove Deklinscina, Duhovnik,... A bi šlo to tako? Sploh nevem, če se prav lotevam ?
<h3>Coming Soon</h3> <table class="list-table meter-arrow-table"> <tr valign="top"> <td class="title"> <a onclick="(new Image()).src='/rg/SOON_1/HPRHS/images/b.gif?link=%2Ftitle%2Ftt1478338%2F';" href="/title/tt1478338/" >Dekliscina</a> </td> <td class="arrow"> <img src="http://i.media-imdb.com/images/SF8a8f8b3c66e29942094eb05489ac3ab3/wheel/arrows/meter_up_arrow.gif" width="9" height="8" alt="Up" /> </td> <td class="percent"> <span > 263% </span> </td> </tr> <tr valign="top"> <td class="title"> <a onclick="(new Image()).src='/rg/SOON_2/HPRHS/images/b.gif?link=%2Ftitle%2Ftt0822847%2F';" href="/title/tt0822847/" >Duhovnik</a> </td> <td class="arrow"> <img src="http://i.media-imdb.com/images/SF696d0921efe53c916590f4214d736157/wheel/arrows/meter_down_arrow.gif" width="9" height="8" alt="Down" /> </td> <td class="percent"> <span > 39% </span> </td> </tr>
hvala
lp
Spura ::
Parsaj kot xml (oziroma dostikrat to ni pravilen xml in rabis posebne knjiznjice za html parse). Potem se sprehajas po drevesu in pobiras vn podatke.
Spura ::
html je xml (ceprav slisim da se lahko napise html, ki ni pravilen xml - predno mi kdo skoci v lase).
commissar ::
Na ta način dobiš source:
potem pa lahko sam v stringu poiščeš z kakšnim regexom, ali pa porabiš HtmlAgilityPack (.net lib za parsanje htmla v DOM)
lp
WebClient wc = new WebClient(); var s = wc.DownloadString("http://www.imdb.com");
potem pa lahko sam v stringu poiščeš z kakšnim regexom, ali pa porabiš HtmlAgilityPack (.net lib za parsanje htmla v DOM)
lp
Trinitron ::
Tudi html je xml (vsaj približno). Poišči nek DOM parser za C# - sigurno obstaja, in potem v drevesni strukturi preprosto poiščeš "table.list-table td.title a".
Spura ::
Evo to. Html ki si ga prilepil zgoraj bi tudi navaden XML parser z lahkoto spremenil v DOM drevo. Ampak tale HTMLAgilityPack najbrz poskrbi tudi za izjeme tko da uporabi to.
bigbada ::
Zanima me kaj delam narobe:
Rad bi da mi v label izpise text ki se pojavi med znacko td class="title TLE NOT /td
Nek čuden error javi. A je problem v tem, da je v tej znacki se ena vgnezdena znacka??
HtmlWeb hw=new HtmlWeb(); HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc = hw.Load("http://www.imdb.com"); List<string> seznam = new List<string>(); string a = doc.DocumentNode.SelectSingleNode("//td[@class='title']").InnerText.ToString(); label1.Text = a;
Rad bi da mi v label izpise text ki se pojavi med znacko td class="title TLE NOT /td
Nek čuden error javi. A je problem v tem, da je v tej znacki se ena vgnezdena znacka??
commissar ::
uporabi metodo SelectNodes, ne SelectSingleNode
iz tega potem dobiš Seznam Nodov in greš čez njega in izpišeš.
Če ima td še podelemente lahko greš še v njih in izpišeš njihov tekst.
Pa napiši error, ki ga dobiš. Nima veze kolk je čuden.
iz tega potem dobiš Seznam Nodov in greš čez njega in izpišeš.
Če ima td še podelemente lahko greš še v njih in izpišeš njihov tekst.
Pa napiši error, ki ga dobiš. Nima veze kolk je čuden.
bigbada ::
Javi mi ta error:
An unhandled exception of type 'System.NullReferenceException' occurred in html Project.exe
Additional information: Object reference not set to an instance of an object.
zdaj sem probal tako, pa še vedno isti error
V tem primeru bi mi vsaki nod iz seznama moralo vstavit v listbox, ki ga imam na formi...
An unhandled exception of type 'System.NullReferenceException' occurred in html Project.exe
Additional information: Object reference not set to an instance of an object.
zdaj sem probal tako, pa še vedno isti error
HtmlWeb hw=new HtmlWeb(); HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc = hw.Load("http://www.imdb.com"); HtmlNodeCollection seznam = doc.DocumentNode.SelectNodes("//td[@class='title']"); foreach (HtmlNode node in seznam) { listBox1.Items.Add(node); }
V tem primeru bi mi vsaki nod iz seznama moralo vstavit v listbox, ki ga imam na formi...
bigbada ::
List<string> bb = new List<string>(); HtmlNodeCollection seznam = doc.DocumentNode.SelectNodes("//td[@class='title']"); foreach (HtmlNode node in seznam) { string a = node.InnerText.ToString(); bb.Add(a); } foreach (string s in bb) { //listBox1.Items.Add(s).ToString(); MessageBox.Show(s); }
Zanima me zakaj mi teh stringov noče loadat v listbox? Messagebox mi ga izpiše. Ko pa hoče v listbox pa javi že prej podani error...
EDIT: Sem že rešil...
Zgodovina sprememb…
- spremenilo: bigbada ()
bigbada ::
Imam eno težavo. Zdaj mi selecta vse node k imajo td class="title". Jaz bi pa rad, da mi samo določene, ki se nahajajo med dvema drugima nodoma (med table class="blabla"..../table)? Kako naj to naredim?
Poskusil sem tle not vstaviti:
doc.DocumentNode.SelectNodes("//table[@class='blabla']/td[@class='title']");
ampak ne deluje. Niti nič dokumentacije ne najdem kako se sploh uporabljajo tile // pa /. Mogoče kdo ve?
EDIT: REŠIL :S
Poskusil sem tle not vstaviti:
doc.DocumentNode.SelectNodes("//table[@class='blabla']/td[@class='title']");
ampak ne deluje. Niti nič dokumentacije ne najdem kako se sploh uporabljajo tile // pa /. Mogoče kdo ve?
EDIT: REŠIL :S
Zgodovina sprememb…
- spremenilo: bigbada ()
commissar ::
na teli ( http://www.w3schools.com/xpath/xpath_sy... ) strani si malo poglej kako xpath sploh deluje. Vendar pazi, htmlagilitypack ne podpira celotne specifikacije
Zgodovina sprememb…
- spremenil: commissar ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Davčne blagajne (strani: 1 2 3 4 … 24 25 26 27 )Oddelek: Programiranje | 333554 (73557) | Macketina |
» | E-računOddelek: Programiranje | 7507 (4270) | ivanhoe5x |
» | [Java]Shranjevanje/Branje nastavitev za povezavo z podatkovno bazoOddelek: Programiranje | 2645 (2419) | KernelPanic |
» | c# html parsanje - s cim? - HtmlAgilityPack mogoce??Oddelek: Programiranje | 1231 (1097) | commissar |
» | [C#] Simobilov GlasnikOddelek: Programiranje | 4348 (1428) | Mrch |