Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 10 odgovora
  • 2.471 pregleda

Najnovija ↓

Problem sa preuzimanjem stranice pomoću C#-a 18.06.2012. u 04:13 · pre 175 meseci #1
Pozdrav!

Pravim aplikaciju u C#-u koja između ostalog treba da preuzme nekoliko hiljada članaka sa Vikipedije. Na primer, za preuzimanje jedne stranice, fragment koda bi trebalo ovako da izgleda:

Code:
WebClient webClient = new WebClient();
string URL = "http://en.wikipedia.org/wiki/Belgrade";
string FileName = @"C:\Belgrade.htm";
webClient.DownloadFile(URL, FileName);


Međutim, za neke članke taj kod odrađuje posao, a za neke ne i tada prijavljuje grešku: The remote server returned an error: (403) Forbidden.

Takođe, dodavao sam pre poziva webClient.DownloadFile(URL, FileName) i

Code:
string userAgent = "XYZ";
webClient.Headers.Add(HttpRequestHeader.UserAgent, userAgent);


gde sam umesto XYZ stavljao raznorazne stvari, što sam uspeo da izguglam, ali to i dalje nije rešilo problem. Tada se desi da mi preuzimanje određenog članka čas ne radi, a onda za isti kod iz čista mira proradi, ali pravi problem sa nekim drugim člankom. Poštovao sam ova pravila praveći dovoljnu pauzu između svaka dva preuzimanja, tako da mislim da nije u tome problem.

Zna li neko šta bi moglo da bude u pitanju?
Re: Problem sa preuzimanjem stranice pomoću C#-a 18.06.2012. u 11:41 · pre 175 meseci #4
Citat:
Tada se desi da mi preuzimanje određenog članka čas ne radi, a onda za isti kod iz čista mira proradi, ali pravi problem sa nekim drugim člankom.


Kod ovakvih slucajeva (radi i ne radi spoljni service) pod uslovom da si isposhtovao pravila, dodaj 'retry' sekvencu na obradu greske ("(403) Forbidden") gde ce program probati n predefinisanih retries (pokusaja).
Re: Problem sa preuzimanjem stranice pomoću C#-a 18.06.2012. u 13:01 · pre 175 meseci #5
Izgleda da sam rešio problem. Program je pokušavao da preuzme jedan te isti članak na četiri jezika u razmaku od nekoliko sekundi, pa tek onda prelazi na drugi članak sa engleske Vikipedije. Sad sam pustio da prvo preuzme sve članke na engleskom, pa ću tek onda pustiti na drugim jezicima, ali ne uporedo nego jezik po jezik. I sve to radim u razmaku nešto većem od jedne sekunde. Zasad radi sat vremena, videćemo kako će se ponašati narednih sati, pošto još nije završio sa engleskim verzijama članaka.
Re: Problem sa preuzimanjem stranice pomoću C#-a 18.06.2012. u 13:43 · pre 175 meseci #8
Treba za seminarski iz nekog predmeta da ispišem listu svih gradova na svetu (pomoću Vikipedije), a onda izvučem informacije iz tih članaka na unapred definisan način. I to da uradim na engleskom i još nekoliko jezika. Najpre bih da ih preuzmem, pa onda da baratam offline sa njima. A ne preuzima mi se cela Vikipedija zbog "svega" 20-ak hiljada članaka, ovako ih je mnogo lakše procesuirati.
Re: Problem sa preuzimanjem stranice pomoću C#-a 18.06.2012. u 13:52 · pre 175 meseci #9
Citat:
Boyka: Je l' mozes da izbacis ceo kod, bas me zanima kako se skida neki sadrzaj sa intrneta preko C#-a.


Nije ne znam kakva nauka, već sam napisao u prvoj poruci, evo ti fragment koda koji se trenutno izvršava. A prethodno sam u fajlu Cities.txt napisao spisak svih država i gradova što sam izvukao manje-više ručno.

Code:
   class Program
    {
        static int WAIT = 1100;

        static void DownloadMethod(WebClient webClient, string URL, string OutputFile)
        {
            System.Threading.Thread.Sleep(WAIT);
            try
            {
                webClient.DownloadFile(URL, OutputFile);
            }
            catch (Exception ex) 
            {
                StreamWriter sw = File.AppendText(@"C:\GreskeENG.txt");
                sw.WriteLine(OutputFile + "|" + ex.Message);
                sw.Close();
            }
        }

        static void Download(string Country, string City)
        {
            WebClient webClient = new WebClient();
            webClient.Headers["User-Agent"] = 
                @"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/A.B (KHTML, like Gecko) Chrome/X.Y.Z.W Safari/A.B.";
            Directory.CreateDirectory(@"C:\Cities\" + Country + @"\" + City);
            string URL = @"http://en.wikipedia.org/wiki/" + City.Replace(' ', '_');
            string OutputFile = @"C:\Cities\" + Country + @"\" + City + @"\[e] " + City + @".htm";
            DownloadMethod(webClient, URL, OutputFile);
        }

        static void Main(string[] args)
        {
            int brojac = 0;
            bool cities = false;
            string Country = "";
            string City = "";
            StreamReader sr = new StreamReader(@"C:\Cities\Cities.txt");
            while (!sr.EndOfStream)
            {
                brojac++;
                Console.Write(brojac + " ");
                string s = sr.ReadLine().Trim();
                Console.WriteLine(s);
                if (s.Equals(@"{"))
                    cities = true;
                else if (s.Equals(@"}"))
                    cities = false;
                else if (!cities)
                {
                    Country = s;
                    Directory.CreateDirectory(@"C:\Cities\" + Country);
                }
                else if (cities)
                {
                    City = s;
                    Download(Country, City);
                }
            }
        }
    }
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme