Avatar billede wedia Nybegynder
10. november 2010 - 14:19 Der er 6 kommentarer og
1 løsning

Problem med

Hej Eksperter,

Jeg er ved at lave en mini crawler men jeg er støt ind i et problem, med  HTMLDocument og getElementsByTagName. Min kode se ses her under. Mit problem er at  når jeg prøver at finde alle udgaver af et tag på siden finder den intet og det gælder alle tags lige fra title til link tags?

Her er så min kode:

protected void Page_Load(object sender, EventArgs e)
{
HTMLDocument DocCrawlHTML = DocCrawlWebPage("http://www.eksperten.dk");
        IHTMLElementCollection htmlCollection = DocCrawlHTML.getElementsByTagName("a");

        showMe.Text = htmlCollection.length.ToString();
}

public static HTMLDocument DocCrawlWebPage(string url)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);

        request.UserAgent = "MyCrawler";

        WebResponse response = request.GetResponse();

        Stream stream = response.GetResponseStream();

        StreamReader reader = new StreamReader(stream);
     
        mshtml.HTMLDocument htmlText = new mshtml.HTMLDocument();

        return htmlText;
}

håber at der er nogle der kan hjælpe!
Avatar billede aaberg Nybegynder
10. november 2010 - 14:23 #1
I stedet for at bruge mshtml.HTMLDocument, så tag at se på Html Agility Pack.
http://htmlagilitypack.codeplex.com/

Dette er et lille rammeværk for at parse og søge i html filer. Den er nemmere at bruge, og vil i mange tilfelde være hurtigere.
Avatar billede wedia Nybegynder
10. november 2010 - 14:43 #2
Er det og så tilladt at bruge i betalings software, ellers kan jeg ikke bruge det :)
Avatar billede mcb2001 Nybegynder
10. november 2010 - 15:03 #3
protected void Page_Load(object sender, EventArgs e)
{
HTMLDocument DocCrawlHTML = DocCrawlWebPage("http://www.eksperten.dk");
        IHTMLElementCollection htmlCollection = DocCrawlHTML.getElementsByTagName("a");

        showMe.Text = htmlCollection.length.ToString();
}

public static HTMLDocument DocCrawlWebPage(string url)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);

        request.UserAgent = "MyCrawler";

        WebResponse response = request.GetResponse();

        Stream stream = response.GetResponseStream();

        StreamReader reader = new StreamReader(stream);
     
        mshtml.HTMLDocument htmlText = new mshtml.HTMLDocument();

        return htmlText;
}

i ovenstående opretter du en TOM htmlText - men hvor i alverden fylder du data i?? du returnerer jo blot en tom side (og lukker ikke din reader efter dig)
Avatar billede aaberg Nybegynder
10. november 2010 - 18:16 #4
Du kan godt bruge Html Agility pack i betalingssoftware.
Avatar billede wedia Nybegynder
16. november 2010 - 15:06 #5
Du har helt ret jeg har siddet og sovet, men jeg har et problem med at putte ind i htmlText jeg har denne kode :

string TheHtmlString = reader.ReadToEnd();
reader.Close();
       
        htmlText.clear();
        htmlText.write(TheHtmlString);
        htmlText.close();

men denne linje  htmlText.write(TheHtmlString); fejler med denne fejl System.Runtime.InteropServices.COMException: Type mismatch.
Avatar billede wedia Nybegynder
18. november 2010 - 07:59 #6
Når jeg valgte at bruge Html Agility pack så smid nogle svar så får points.
Avatar billede aaberg Nybegynder
18. november 2010 - 08:24 #7
Svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester