Чтение и публикация на веб-страницах с использованием C #

2

У меня есть проект на работе, который требует от меня возможности вводить информацию на веб-страницу, читать следующую страницу, на которую я перенаправляюсь, а затем предпринимать дальнейшие действия. Упрощенный пример реального мира будет похож на google.com, вводя "Кодирующие трюки" в качестве критериев поиска и прочитав результирующую страницу.

Небольшие примеры кодирования, такие как те, которые связаны с http://www.csharp-station.com/HowTo/HttpWebFetch.aspx, рассказывают, как читать веб-страницу, но не как с ней взаимодействовать путем отправки информации в форму и перехода к следующей странице.

Для записи я не создаю вредоносный и/или спам-родственный продукт.

Итак, как мне перейти на прочитанные веб-страницы, для которых требуется выполнить несколько шагов обычного просмотра?

Теги:
screen-scraping

6 ответов

4

Вы можете программно создать запрос Http и получить ответ:

 string uri = "http://www.google.com/search";
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";

        // encode the data to POST:
        string postData = "q=searchterm&hl=en";
        byte[] encodedData = new ASCIIEncoding().GetBytes(postData);
        request.ContentLength = encodedData.Length;

        Stream requestStream = request.GetRequestStream();
        requestStream.Write(encodedData, 0, encodedData.Length);

        // send the request and get the response
        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        {

            // Do something with the response stream. As an example, we'll
            // stream the response to the console via a 256 character buffer
            using (StreamReader reader = new StreamReader(response.GetResponseStream()))
            {
                Char[] buffer = new Char[256];
                int count = reader.Read(buffer, 0, 256);
                while (count > 0)
                {
                    Console.WriteLine(new String(buffer, 0, count));
                    count = reader.Read(buffer, 0, 256);
                }
            } // reader is disposed here
        } // response is disposed here

Конечно, этот код вернет ошибку, поскольку Google использует GET, а не POST, для поисковых запросов.

Этот метод будет работать, если вы имеете дело с определенными веб-страницами, поскольку URL-адреса и данные POST в основном жестко закодированы. Если вам нужно что-то более динамичное, вам придется:

  • Захват страницы
  • Извлеките форму
  • Создайте строку POST на основе полей формы

FWIW, я думаю, что что-то вроде Perl или Python может быть лучше подходит для такого рода задач.

изменить: x-www-form-urlencoded

3

Вы можете попробовать Selenium. Запишите действия в Firefox с помощью Selenium IDE, сохраните script в формате С#, а затем воспроизведите их с помощью оболочки Selenium RC С#. Как уже упоминалось, вы также можете использовать System.Net.HttpWebRequest или System.Net.WebClient. Если это настольное приложение, см. Также System.Windows.Forms.WebBrowser.

Приложение: Подобно Selenium IDE и Selenium RC, которые основаны на Java, WatiN Test Recorder и WatiN основаны на .NET.

2

Что вам нужно сделать, так это сохранить и проанализировать источник html для каждой страницы в цепочке. Для каждой страницы вам нужно выяснить, как будет выглядеть представление формы, и отправить запрос, который будет соответствовать этому, чтобы получить следующую страницу в цепочке.

Что я делаю, так это создать пользовательский класс, который обертывает System.Net.HttpWebRequest/HttpWebResponse, поэтому получение страниц так же просто, как использование System.Net.WebClient. Тем не менее, мой пользовательский класс также сохраняет один и тот же контейнер cookie через запросы и упрощает отправку почтовых данных, настраивает пользовательский агент и т.д.

0

Мне очень повезло с этим продуктом:

IMacros

http://www.iopus.com/

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

Продукт верхнего уровня имеет графический интерфейс, который вы можете использовать для записи и редактирования макросов, а также библиотеки С#, которые вы можете вызывать из .Net-кода.

IMHO, это одна из тех областей программирования, которые кажутся простыми при запуске ( "Я просто ПОЛУЧИТЬ HTML для страницы, обработать строку, затем ПОЛУЧИТЬ следующую страницу..." ), но на практике это становится чтобы быть реальной PITA.

0

В зависимости от того, как работает веб-сайт, вы можете либо манипулировать URL-адресом, чтобы выполнять то, что хотите. например, для поиска слова "битлес" вы можете просто открыть запрос на google.com?q=beetles, а затем просто прочитать результаты.

В качестве альтернативы, если веб-сайт не использует значения querystring (url) для обработки действий страницы, вам необходимо будет работать с веб-запросом, который вместо этого размещает требуемые значения на веб-сайте. Искать в Google для работы с WebRequest и webresponse.

0

В вашем примере Google вы не должны вводить что-либо в критерии поиска, а вместо этого переходите непосредственно к странице, на которой находится кнопка поиска.

В вашем примере: http://www.google.com/search?hl=en&q=coding%20tricks

Ещё вопросы

Сообщество Overcoder
Наверх
Меню