Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa preuzimanjem stranice pomoću C#-a

[es] :: .NET :: Problem sa preuzimanjem stranice pomoću C#-a

[ Pregleda: 1755 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Boneli

Član broj: 304256
Poruke: 7
*.BVCOM.NET.



Profil

icon Problem sa preuzimanjem stranice pomoću C#-a18.06.2012. u 03:13 - pre 144 meseci
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?
 
Odgovor na temu

ravni

Član broj: 8894
Poruke: 373



+15 Profil

icon Re: Problem sa preuzimanjem stranice pomoću C#-a18.06.2012. u 08:28 - pre 144 meseci
Stavi da ti je razmak izmedju dva preuzimanja 30s pa vidi da li ce uspeti. Ako uspe, mozes da smanjujes period dok ne pocnes opet da dobijas status 403.
 
Odgovor na temu

Boneli

Član broj: 304256
Poruke: 7
*.BVCOM.NET.



Profil

icon Re: Problem sa preuzimanjem stranice pomoću C#-a18.06.2012. u 09:39 - pre 144 meseci
Povećavao sam pauzu i znatno više od pola minuta, ali izgleda da nije do toga.
 
Odgovor na temu

dejanet
Beograd

Član broj: 19240
Poruke: 1181



+837 Profil

icon Re: Problem sa preuzimanjem stranice pomoću C#-a18.06.2012. u 10:41 - pre 144 meseci
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).
 
Odgovor na temu

Boneli

Član broj: 304256
Poruke: 7
*.bvcom.net.



Profil

icon Re: Problem sa preuzimanjem stranice pomoću C#-a18.06.2012. u 12:01 - pre 144 meseci
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.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Problem sa preuzimanjem stranice pomoću C#-a18.06.2012. u 12:20 - pre 144 meseci
Ako smem da pitam, šta je svrha ovog poduhvata?
 
Odgovor na temu

Boyka
BPS

Član broj: 287185
Poruke: 338
*.dynamic.isp.telekom.rs.



+33 Profil

icon Re: Problem sa preuzimanjem stranice pomoću C#-a18.06.2012. u 12:40 - pre 144 meseci
Je l' mozes da izbacis ceo kod, bas me zanima kako se skida neki sadrzaj sa intrneta preko C#-a.
 
Odgovor na temu

Boneli

Član broj: 304256
Poruke: 7
*.bvcom.net.



Profil

icon Re: Problem sa preuzimanjem stranice pomoću C#-a18.06.2012. u 12:43 - pre 144 meseci
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.
 
Odgovor na temu

Boneli

Član broj: 304256
Poruke: 7
*.bvcom.net.



Profil

icon Re: Problem sa preuzimanjem stranice pomoću C#-a18.06.2012. u 12:52 - pre 144 meseci
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);
                }
            }
        }
    }
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Problem sa preuzimanjem stranice pomoću C#-a18.06.2012. u 15:32 - pre 144 meseci
Za sastavljanje spiska verovatno se počelo od ovog linka http://en.wikipedia.org/wiki/Lists_of_cities_by_country
 
Odgovor na temu

Boneli

Član broj: 304256
Poruke: 7
*.bvcom.net.



Profil

icon Re: Problem sa preuzimanjem stranice pomoću C#-a18.06.2012. u 16:53 - pre 144 meseci
Da, počeo sam sa tim linkom, pa odatle za svaku državu redom...
 
Odgovor na temu

[es] :: .NET :: Problem sa preuzimanjem stranice pomoću C#-a

[ Pregleda: 1755 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.