Тайм-аут поискового робота - PullRequest
2 голосов
/ 15 января 2012

Я работаю над простым веб-сканером, чтобы получить URL, сканировать ссылки первого уровня на сайте и извлекать письма со всех страниц, используя RegEx ...

Я знаю, что это немного неаккуратно, и это только начало, но я всегда получаю «Тайм-аут операции» после 2 минут работы скрипта ..

 private void button1_Click(object sender, System.EventArgs e)
    {

        string url = textBox1.Text;
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        StreamReader sr = new StreamReader(response.GetResponseStream());
        string code = sr.ReadToEnd();
        string re = "href=\"(.*?)\"";
        MatchCollection href = Regex.Matches(code, @re, RegexOptions.Singleline);
        foreach (Match h in href)
        {

            string link = h.Groups[1].Value;
            if (!link.Contains("http://"))
            {
                HttpWebRequest request2 = (HttpWebRequest)WebRequest.Create(url + link);
                HttpWebResponse response2 = (HttpWebResponse)request2.GetResponse();
                StreamReader sr2 = new StreamReader(response.GetResponseStream());
                string innerlink = sr.ReadToEnd();


                MatchCollection m2 = Regex.Matches(code, @"([\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?)", RegexOptions.Singleline);


                foreach (Match m in m2)
                {
                    string email = m.Groups[1].Value;

                    if (!listBox1.Items.Contains(email))
                    {
                        listBox1.Items.Add(email);
                    }
                }
            }
        }

         sr.Close();
        }

Ответы [ 2 ]

4 голосов
/ 15 января 2012

Не разбирайте HTML, используя Regex. Для этого используйте Html Agility Pack.

Что такое Html Agility Pack (HAP)?

Это гибкий анализатор HTML, который создает DOM для чтения / записи и поддерживает простой XPATH или XSLT (вам на самом деле НЕ НУЖНО понимать XPATH или XSLT, чтобы его использовать, не беспокойтесь ...). Это библиотека кода .NET, которая позволяет анализировать HTML-файлы «из Интернета». Синтаксический анализатор очень терпим с искаженным HTML «реального мира». Объектная модель очень похожа на то, что предлагает System.Xml, но для документов HTML (или потоков).

Дополнительная информация

1 голос
/ 15 января 2012

Комментарий Одеда правильный, нам нужно знать, с чем конкретно вам нужна помощь; тем не менее, я могу, по крайней мере, указать вам HtmlAgility Pack , поскольку он решит большинство ваших проблем с веб-очисткой.

Удачи!

Мэтт

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...