Ima li neki način da iz html stranice automatikom dobijem stablo ili tako nešto čime bih mogao lakše baratati podacima koji se nalaze na stranici, da su raspoređeni po elementima i da mogu po atributima ili nečemu ih filtrirati pa da ih spremim u bazu itd
Parse Html > Treeview ? c#?
- poruka: 7
- |
- čitano: 1.010
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Podsjetilo me na ovo :D
Podsjetilo me na ovo :D
http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454
Koristio sam ga davno, ali uglavnom znam da on omogućuje iteriranje kroz elemente html-a poput stabla.
Pokušavao sam s tim, ali ne uspijevam nikako dokučiti tu Xpath sintaksu ili negdje drugdje griješim
Bi li znao sparsati ovakvu jednu neurednu stranicu:
http://jsbin.com/ruzudadoca/1/edit?html
pomoću ovog koda dobijem zadnja 3 p elementa ali u jednom čvoru
var nodes = new List<HtmlNode>();
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("/html/body/div/div[2]/div[2]/div[2]/div[3]/div/div"))
{
nodes.Add(node);
Console.WriteLine(node.InnerText);
}
S obzirom da stranica ne izgleda uvijek jednako, trebao bih dinamički iterirati kroz te p elemente a ponekad i div elemente, i prepoznao bih da sam došao do početka liste koju želm scraepeati kada naleti na zadnji naslov "Popis elemenata" prije nego krenu peteroznamenkasti <b>IDjevi<b>. Tu vjerojatno bi trebao i neki regex? A trebao bih raspodijeliti naslov i ID koji se nalaze zajedno u b elementu <b>5znamenkastiID i naslov<b> i posebno opis.
Je li uopće moguće dinamički generirati Xpath ovisno o nekom uvjetu.
Zar je nemoguće da automatski generira kompletno stablo kao strukturu neku kojom bih mogao baratati C# kodom a ne statičkom Xpath putanjom ?
evo pokušao sam drugim pristupom, i iako vjerojatno nije idealno rješenje, it gets the job done,
prepoznajem te svoje "iteme" u paragrafima pomoću regexa po 4 znamenkastom IDu sa forward slashom
i sat trebam brdo tih regexova smislit da si odvojim šta mi treba od toga jer drugačije ne znam, probao sam sve
Fizzler, HtmlAgilityPack, Xpath....ne mogu skužit to
pa sad radim sa stringom umjesto sa strukturiranim stablom
string url = "nekiurl";
var Webget = new HtmlWeb();
var doc = Webget.Load(url);
string sample;
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//p"))
{
sample = node.InnerText;
Regex rgx = new Regex("[0-9]{4}/");
if(rgx.IsMatch(sample))
Console.WriteLine(sample);
}