Любой хороший веб-Crawling с открытым исходным кодом в C # - PullRequest
9 голосов
/ 05 декабря 2010

Я создаю механизм сравнения покупок, и мне нужно создать механизм сканирования для ежедневного сбора данных.

Я решил собрать сканер в C #. У меня много плохого опыта с классами HttpWebRequest / HttpWebResponse, и они, как известно, очень глючные и нестабильные для больших сканирований. Поэтому я решил НЕ строить на них. Даже в фреймворке 4.0 они глючат.

Я говорю по своему личному опыту.

Мне бы хотелось узнать мнение экспертов, которые занимались разработкой кодировщиков, если они знают о каких-либо хороших инфраструктурах сканирования с открытым исходным кодом, таких как java, с общедоступными библиотеками nutch и apache, которые являются очень стабильными и очень надежными библиотеками.

Если в C # уже есть какие-то фреймворки для сканирования, я сделаю свое приложение поверх них.

Если нет, то планирую расширить это решение из кода проекта и расширить его.

http://www.codeproject.com/KB/IP/Crawler.aspx

Если кто-нибудь может предложить мне лучший путь, я буду очень благодарен.

РЕДАКТИРОВАТЬ: Некоторые сайты, которые я должен сканировать, отображают страницу с использованием очень сложных сценариев Java, теперь это добавило сложности моим веб-сканерам, поскольку мне нужно иметь возможность сканировать страницы, отображаемые с помощью JavaScript. Если кто-то использовал какую-либо библиотеку в C #, которая может сканировать визуализированный JavaScript, пожалуйста, поделитесь. Я использовал ватин, который я не предпочитаю, и я также знаю о селене. Если вы знаете что-либо, кроме этого, пожалуйста, поделитесь со мной и сообществом.

Ответы [ 5 ]

3 голосов
/ 11 февраля 2015

PhantomJS + HtmlAgilityPack

Я знаю, что эта тема немного устарела, но я достиг лучших результатов с PhantomJS . Для этого есть пакет NuGet , а его объединение с HtmlAgilityPack делает довольно неплохой набор инструментов для извлечения и удаления.

В этом примере просто используются встроенные возможности разбора PhantomJS. Это работало с очень старой версией библиотеки; поскольку он все еще находится в активной разработке, можно с уверенностью предположить, что было добавлено еще больше возможностей.

void Test()
{
    var linkText = @"Help Spread DuckDuckGo!";
    Console.WriteLine(GetHyperlinkUrl("duckduckgo.com", linkText));
    // as of right now, this would print ‘https://duckduckgo.com/spread’
}

/// <summary>
/// Loads pageUrl, finds a hyperlink containing searchLinkText, returns
/// its URL if found, otherwise an empty string.
/// </summary>
public string GetHyperlinkUrl(string pageUrl, string searchLinkText)
{
    using (IWebDriver phantom = new PhantomJSDriver())
    {
        phantom.Navigate.GoToUrl(pageUrl);
        var link = phantom.FindElement(By.PartialLinkText(searchLinkText));
        if(link != null)
            return link.GetAttribute("href");
    }
    return string.Empty;
}
3 голосов
/ 21 марта 2013

Abot C # Web Crawler

Описание от http://code.google.com/p/abot/ гласит: Abot - это веб-сканер C # с открытым исходным кодом, созданный для скорости и гибкости.Он заботится о низкоуровневом подключении (многопоточность, http-запросы, планирование, анализ ссылок и т. Д.).Вы просто подключаетесь к ключевым событиям для обработки данных или подключаете свои собственные реализации основных интерфейсов, чтобы получить полный контроль над процессом сканирования.

все же не использовал его.

2 голосов
/ 12 февраля 2013

arachnode.net может обрабатывать JavaScript.

2 голосов
/ 05 декабря 2010

Я знаю кое-что под названием NCrawler, доступное в codeplex. Не использовал его лично, но коллега говорит, что все работает хорошо.

0 голосов
/ 14 февраля 2011

Ncrawler не поддерживает Javascript. Но это выглядит очень хорошо, и простое в использовании решение, если вам не нужно выполнение JavaScript

...