@kotarak

Как быстро парсить ссылки на портале?

Нужно найти битые ссылки на портале.
Я скачиваю html страницы, нахожу на ней все ссылки и добавляю их в очередь на скачивание. В процессе выделяю битые\некорректные.
HttpWebResponse response;
                StreamReader respStream;
                try
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(link.ToString());
                    request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/15.0";
                    request.Accept = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                    request.AllowAutoRedirect = true;
                    request.Timeout = 10000;
                    response = (HttpWebResponse)request.GetResponse();
                    respStream = new StreamReader(response.GetResponseStream());
                    html = respStream.ReadToEnd();
                    response.Close();
                    respStream.Close();
                }
                catch (Exception ex)
                {
                    System.Console.WriteLine("-------------\n" +
                            "Bad link: " + link + "\n" +
                            "From: " + link.Parent +
                            "\n" + ex.Message);
                    link.ErrorComments = ex.Message;
                    link.Parent.AddSon(link);
                    continue;
                }

Вот код для скачивания.
Я распараллелил программу, но скорость глобально не изменилась. С 60 ссылок в минуту в однопотоке скорость выросла до 120. Возможно я не оптимально скачиваю станицы? Скорость интернета позволяет скачивать 10-20 страниц в секунду. При этом со временем скорость скачивания падает. Как ускорить процесс?
  • Вопрос задан
  • 202 просмотра
Пригласить эксперта
Ответы на вопрос 1
Jump
@Jump
Системный администратор со стажем.
Возможно я не оптимально скачиваю станицы?
Возможно.
Скорость интернета позволяет скачивать 10-20 страниц в секунду.
Не факт. Как вы считали?
  • Во первых даже считать по скорости - средний размер страницы 1,5MB * 20 страниц = 30MB/s или 30*8=240Mbit/s. У вас реально гарантированный канал на 200-300мегабит?
  • Во вторых - скорость канала, даже гарантированного это скорость до конкретной точки, как правило до шлюза провайдера, а уж дальше как повезет. Поэтому при честном канале 100мегабит/с в интернет, скорость до сервера расположенного где-нибудь в Бразилии, будет 50килобит/с.
  • В третьих - вы уверены что сам сервер способен отдавать быстрее, и не стоит никаких ограничений.


Многопоточность и асинхронность при парсинге помогает тем, что нивелирует время на ожидание ответа. И позволяет наиболее полно загрузить канал. А скорость оно никак не увеличивает.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы