Задача с переходом на новую страницу

Рейтинг: 0Ответов: 2Опубликовано: 26.04.2015

Делаю парсинг сайта собираю с него ссылки. Все отлично, но как мне сделать переход на новую страницу ,если я на странице собрал все ссылки.

Вот код:

for (int add = 1; true; add += 2) {
    var Request = new HttpRequest();
    string html;
    int countPage = 0;
    string htmlpath = String.Concat("http://test.ru/firms/?news=92000&grp=1%22&page=", countPage, "/");
    html = Request.Get(htmlpath).ToString();
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.OptionFixNestedTags = true; //Опционально, если требуется
    doc.Load(new StringReader(html));
    //В пути удалить tdata копировать в хроме
    string title = String.Concat("//body/div[1]/main/div[1]/table/tr/td[3]/div/table[2]/tr[", add, "]/td/table/tr/td[2]/a[@href]");
    var nodes = doc.DocumentNode.SelectNodes(title);
    if (nodes == null) // Здесь выкидывает из цикла, как все ссылки на странице собраны.
        break;

    StreamWriter sw = new StreamWriter(@"C:\\Test.txt", true);
    foreach(var node in nodes) {
      sw.WriteLine("http://test.ru" + node.Attributes["href"].Value);
    }
    sw.Close();
}

Но мне надо перезапустить цикл,только теперь еще нужно добавить к countPage +1, чтобы он собирал ссылки со следующей страницы. Я понимаю, что это редкостный говнокод, ну я только начал учить программинг. Спасибо!

Ответы

▲ 2Принят

Оберните ваш код в еще один цикл

for (int page= 0; page< {сколько там всего страниц надо собрать}; page++)
{
    CollectLinksFromPage(page);
}

....

public void CollectLinksFromPage(int countPage)
{
    // тут весь код из вашего вопроса кроме строчки int countPage = 0;
}
▲ 1

Просто соберите ссылки в некий массив, да последовательно обойдите его, уже в другом цикле. Общий код для получения ссылок выделите в отдельный метод.

Если вам требуется собрать вообще все ссылки со всех страниц сайта(ну или на некую потенциально изменяемую глубину) - достаточно удобным будет использовать рекурсию.

Ну и просто совет - не используете для веб-скраппинга HAG. Его писали для разбора XHTML. В случае же с HTML - он практически всегда заставляет писать громоздкий, уродливый, и неэффективный код.