Тайм-аут поискового робота
Я работаю над простым веб-сканером, чтобы получить URL, сканировать ссылки первого уровня на сайте и извлекать письма со всех страниц, используя RegEx...
Я знаю, что это немного неаккуратно и это только начало, но я всегда получаю "Timed Out операции" после 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 ответа
Не разбирайте HTML, используя Regex. Для этого используйте Html Agility Pack.
Что такое Html Agility Pack (HAP)?
Это гибкий HTML-парсер, который создает DOM для чтения / записи и поддерживает простой XPATH или XSLT (вам на самом деле не нужно понимать XPATH или XSLT, чтобы его использовать, не беспокойтесь...). Это библиотека кода.NET, которая позволяет анализировать HTML-файлы "вне сети". Синтаксический анализатор очень терпим с искаженным HTML "реального мира". Объектная модель очень похожа на то, что предлагает System.Xml, но для документов HTML (или потоков).
Дополнительная информация
Комментарий Одеда правильный, мы должны знать, с чем конкретно вам нужна помощь; однако я могу, по крайней мере, указать вам на пакет HtmlAgility Pack, поскольку он решит большинство ваших проблем с веб-очисткой.
Удачи!
Matt