Avatar billede eonix Nybegynder
11. april 2007 - 11:18 Der er 1 løsning

HTML Grab problemer

Hej folkens,

Mit spørgsmål går på hvordan jeg i C# kan hente HTML data fra en hjemmeside og hente bestemte informationer 10 gange eller mindre - forskellige steder på HTML siden.

Eksempel:

En HTML side indeholder 10 produkter - for hver af disse produkter er oplyst produktnavn, pris, kategori, vægt, type og en addresse.
Der er altså 6 forskellige informationer jeg vil tage ud og smide en i tekstfil/db-fil.

Mit nuværende problem er at jeg kun kan gøre dette en gang korrekt - da jeg ikke kan finde ud af at lave en algoritme der sørger for at starte EFTER den har fundet den sidste information fra det forrige produkt.

Min kode ser lige nu således ud:
.
.
.
            if (comboBox1.SelectedItem.ToString() == "a")
            {
                byte[] b = wc.DownloadData(urlstart + page + urlmiddel + "a" + urlend);
                string s = System.Text.Encoding.ASCII.GetString(b);
                int start = s.IndexOf("</strong> of ") + ("</strong> of ").Length;
                int end = s.IndexOf(" |", start);
                int end2 = s.IndexOf("</div", start);
                string count = s.Substring(start, end - start);
                if (count.Length < 200)
                {
                    number = Convert.ToInt32(count);
                }
                else
                {
                    count = s.Substring(start, end2 - start);
                    number = Convert.ToInt32(count);
                }
                int pages = number / 10;

                for (int actualpage = pages; actualpage != 0; actualpage--)
                {
                    byte[] m = wc.DownloadData(urlstart + actualpage + urlmiddel + "a" + urlend);
                    string st = System.Text.Encoding.ASCII.GetString(m);
                    int productstart = st.IndexOf("productName = \"") + ("productName = \"").Length;
                    int productend = 0;
                    while (14 != (productstart = st.IndexOf("productName = \"", productend) + ("productName = \"").Length))
                        {
                        productend = st.IndexOf("\";", productstart);
                        string productname = st.Substring(productstart, productend - productstart);
                        // Get product prices
                        int pricestart = st.IndexOf("price = \", $") + ("price = \", $").Length;
                        int priceend = st.IndexOf(" to buy\"", pricestart);
                        string productprice = st.Substring(pricestart, priceend - pricestart);
                        productprice = productprice.Replace(".", ",");
                        // Get product size
                        int sizestart = st.IndexOf("fileSize = \"") + ("fileSize = \"").Length;
                        int sizeend = st.IndexOf("MB\";", sizestart);
                        // Get Product URL
                        int productUrlstart = st.IndexOf("titleDetails.push(listingArray);" + "\n" + "var listingArray = new Object();" + "\n" + "</script>" + "\n\n" + "<a href=\"") + ("titleDetails.push(listingArray);" + "\n" + "var listingArray = new Object();" + "\n" + "</script>" + "\n\n" + "<a href=\"").Length;
                        int productUrlend = st.IndexOf("\" class=\"prod\">", productUrlstart);
                        string productUrl = st.Substring(productUrlstart, productUrlend - productUrlstart);
                        productend = sizeend;
                        if (sizeend - sizestart > 50)
                        {
                            int sizeend2 = st.IndexOf("K\";", sizestart);
                            string productsize = st.Substring(sizestart, sizeend2 - sizestart);
                            productsize = productsize.Replace(".", ",");
                            string assembled = productname + ";" + productprice + ";" + productsize + ";" + productUrl;
                            writer(assembled);
                            updateInfo2(number);
                        }

                        else
                        {
                            string productsize = st.Substring(sizestart, sizeend - sizestart);
                            productsize = productsize.Replace(".", ",");
                            string assembled = productname + ";" + productprice + ";" + productsize + ";" + productUrl;
                            writer(assembled);
                            updateInfo2(number);
                        }
                       
                    }
                }

            }
            else if (comboBox1.SelectedItem.ToString() == "b")
            {
                MessageBox.Show("Bingo");
            }
           

            //MessageBox.Show(comboBox1.SelectedItem.ToString());

        }
        static void writer(string obj)
        {

            FileStream file = new FileStream("contacts.txt", FileMode.Append, FileAccess.Write);
            StreamWriter sw = new StreamWriter(file);
            sw.WriteLine(obj);
            sw.Close();
            file.Close();
        }

    }
.
.
.

Hvis nogen har noget kode liggende eller et forslag der kan være behjælpelig så er i meget velkommende til at skrive et forslag.
Avatar billede eonix Nybegynder
11. april 2007 - 12:33 #1
Har fundet ud af en anderledes grupering af oplysningerne så jeg er kommet ud over problemet. - Ellers tak for indsatsen :)
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