Gå til innhold

C#: Trekke ut flere tilfeldige koder fra et HTML dokument


Anbefalte innlegg

Hei. trenger litt hjelp.

 

Jeg har en HTML side jeg skal trekke ut noen tilfeldige koder fra.

 

<form method="post" name="form">

<table align="center" style="border: 3px solid black;">
<input type="hidden" name="wdjimgybbdzfqpfgj" id="wdjimgybbdzfqpfgj" value="" />
<input type="hidden" name="qjnmkzyihw" id="qjnmkzyihw" value="" />
<input type="hidden" name="ghokntpblxl" id="ghokntpblxl" value="" />
<input type="hidden" name="ckgpjlyaprjiwolfa" id="ckgpjlyaprjiwolfa" value="" />
<input type="hidden" name="wolrmpedbjztpnp" id="wolrmpedbjztpnp" value="" />
<input type="hidden" name="dgftciflyrug" id="dgftciflyrug" value="" />
<input type="hidden" name="heprdfdkysgpxg" id="heprdfdkysgpxg" value="" />
<input type="hidden" name="syiicitrfvvsa" id="syiicitrfvvsa" value="" />
<input type="hidden" name="xfyfmdfzidlrlueprxjt" id="xfyfmdfzidlrlueprxjt" value="" />


</tr>
<tr>
<td onclick="abBytt(this,'wolrmpedbjztpnp');" style="padding: 6px;"><img width="100" height="100" alt="Bilde" src="bilde.php?b=1&tull=f906edaf1cad35c347aeee27defaa634"></td>
<td onclick="abBytt(this,'syiicitrfvvsa');" style="padding: 6px;"><img width="100" height="100" alt="Bilde" src="bilde.php?b=2&tull=f906edaf1cad35c347aeee27defaa634"></td>
<td onclick="abBytt(this,'heprdfdkysgpxg');" style="padding: 6px;"><img width="100" height="100" alt="Bilde" src="bilde.php?b=3&tull=f906edaf1cad35c347aeee27defaa634"></td>
</tr>
<tr>
<td onclick="abBytt(this,'ghokntpblxl');" style="padding: 6px;"><img width="100" height="100" alt="Bilde" src="bilde.php?b=4&tull=f906edaf1cad35c347aeee27defaa634"></td>
<td onclick="abBytt(this,'dgftciflyrug');" style="padding: 6px;"><img width="100" height="100" alt="Bilde" src="bilde.php?b=5&tull=f906edaf1cad35c347aeee27defaa634"></td>
<td onclick="abBytt(this,'ckgpjlyaprjiwolfa');" style="padding: 6px;"><img width="100" height="100" alt="Bilde" src="bilde.php?b=6&tull=f906edaf1cad35c347aeee27defaa634"></td>
</tr>
<tr>
<td onclick="abBytt(this,'qjnmkzyihw');" style="padding: 6px;"><img width="100" height="100" alt="Bilde" src="bilde.php?b=7&tull=f906edaf1cad35c347aeee27defaa634"></td>
<td onclick="abBytt(this,'xfyfmdfzidlrlueprxjt');" style="padding: 6px;"><img width="100" height="100" alt="Bilde" src="bilde.php?b=8&tull=f906edaf1cad35c347aeee27defaa634"></td>
<td onclick="abBytt(this,'wdjimgybbdzfqpfgj');" style="padding: 6px;"><img width="100" height="100" alt="Bilde" src="bilde.php?b=9&tull=f906edaf1cad35c347aeee27defaa634"></td>
</tr>
<tr>
<td colspan="3" align="right"><input class="kn1" value="Send" type="submit" /></td>
</tr>
</table></form><!-- START BUNN -->
<br /><br /><br /><br /><br /><br /><br />
<table class="bunn" align="center" style="width: 100%; border: 3px solid #000000;">
<tr>
<td align="center">

 

Kodene jeg skal ha ut er kodene som ligger som name på inputtene, feks. "wdjimgybbdzfqpfgj"

Jeg ønsker også å hente ut alle linkene til bildene, men dette kan jeg bruke split komandoen, siden jeg har et fast og unik tall per bile jeg kan bruke til å fortelle programmet hvilken kode det skal hente, men de tilfeldige kodene øverst, vet jeg ikke hvordan jeg skal få ut siden jeg ikke har noen måter å skille de ifra hverandre på.

 

Denne bruker jeg til å hente de tilfeldige kodene bildene:

 


public static string Split(string msg, string delim, int part)
       {
           try
           {
               for (int a = 0; a < part; a++)
               {
                   msg = msg.Substring(msg.IndexOf(delim) + delim.Length);
               }
               if (msg.IndexOf(delim) == -1) return msg;
               return msg.Substring(0, msg.IndexOf(delim));
           }
           catch { return ""; }
       }

private void extract()
{
    string code1 = Split(Split(html, "bilde.php?b=1", 1), "\"></td>", 0);
}

 

Men hvordan kan jeg hente de tilfeldige kodene fra formen??

 

Mvh. Even

Lenke til kommentar
Videoannonse
Annonse

Hva med å bruke regExp, burde fungere fint. Dette tar forbehold om at kodene du er ute etter alltid kommer i form av lower-case enelske bokstaver. Men dette kan fint endres om det kan komme tall o.s.v. og.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;

namespace testApp
{
   class Program
   {
       static void Main(string[] args)
       {
           StreamReader fileReader = new StreamReader("file.htm");
           string plainText = fileReader.ReadToEnd();

           foreach (string key in extract(plainText))
           {
               Console.WriteLine(key);
           }
           Console.ReadLine();
       }

       /// <summary>
       /// Parses some text to find all the keys in it
       /// </summary>
       /// <param name="plainText">A plain-text to search through.</param>
       /// <returns>A list of strings with the keys found</returns>
       static List<string> extract(string plainText)
       {
           List<string> results = new List<string>();
           Regex keyRegex = new Regex("<input type=\"hidden\" name=\"(.*?)\" id=");
           MatchCollection matches = keyRegex.Matches(plainText);
           foreach (Match m in matches)
           {
               results.Add(m.Groups[1].Value);
           }

           return results;
       }
   }
}

Lenke til kommentar

Hvis du skal søke etter tekst, så vil du i 95% av tilfellene ønske å benytte Regular Expressions. Dette er noe som er veldig verdifult å lære seg, men som ikke er på langt nær så vanskelig som det kan se ut som.

Les om RegEx klassen på MSDN, så skal du i løpet av ganske kort tid klare å løse dette på egenhånd.

Lenke til kommentar
Hvis du skal søke etter tekst, så vil du i 95% av tilfellene ønske å benytte Regular Expressions.

Det kan vel diskuteres når det gjelder html og xml.

Her kan ofte regex være et dårlig valg,det er en grunn til at det finnes parsere.

Bobince har et artig svar her Html -Regex

 

Nå kjenner jeg ikke så godt til parsere for C#,men kan ta et eksempel i python.

from BeautifulSoup import BeautifulSoup

html = '''\
<form method="post" name="form">

<table align="center" style="border: 3px solid black;">
<input type="hidden" name="wdjimgybbdzfqpfgj" id="wdjimgybbdzfqpfgj" value="" />
<input type="hidden" name="qjnmkzyihw" id="qjnmkzyihw" value="" />
<input type="hidden" name="ghokntpblxl" id="ghokntpblxl" value="" />
<input type="hidden" name="ckgpjlyaprjiwolfa" id="ckgpjlyaprjiwolfa" value="" />
<input type="hidden" name="wolrmpedbjztpnp" id="wolrmpedbjztpnp" value="" />
<input type="hidden" name="dgftciflyrug" id="dgftciflyrug" value="" />
<input type="hidden" name="heprdfdkysgpxg" id="heprdfdkysgpxg" value="" />
<input type="hidden" name="syiicitrfvvsa" id="syiicitrfvvsa" value="" />
<input type="hidden" name="xfyfmdfzidlrlueprxjt" id="xfyfmdfzidlrlueprxjt" value="" />'''


soup = BeautifulSoup(html)
tag = soup.findAll('input')
print [tag[i]['id'] for i in range(len(tag))]
##[u'wdjimgybbdzfqpfgj', u'qjnmkzyihw', u'ghokntpblxl', u'ckgpjlyaprjiwolfa', u'wolrmpedbjztpnp', u'dgftciflyrug', u'heprdfdkysgpxg', u'syiicitrfvvsa', u'xfyfmdfzidlrlueprxjt']

For og finne "bilde" link er det bare og forandere til.

tag = soup.findAll('img')
print [tag[i]['scr'] for i in range(len(tag))]

Endret av SNIPPSAT
Lenke til kommentar
Hvis du skal søke etter tekst, så vil du i 95% av tilfellene ønske å benytte Regular Expressions.

Det kan vel diskuteres når det gjelder html og xml.

Her kan ofte regex være et dårlig valg,det er en grunn til at det finnes parsere.

Bobince har et artig svar her Html -Regex

Det gjelder ikke bare HTML. Det er ikke noen god idé å bruke regex for å parse et programmeringsspråk.

 

Her er det derimot ikke parsing av HTML, men søk etter tekst med et gitt kriterium. Antagelsen her er at selve formatet ikke endrer seg, og så lenge det er gyldig, så er regex helt greit til dette.

 

Skal du parse HTML, har du Html Agility Pack

Endret av GeirGrusom
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...