проблема размещения страниц при работе в Scraping - PullRequest
1 голос
/ 26 мая 2010

Я работаю над очисткой экрана и успешно выполнил работу на 3 веб-сайтах. У меня есть проблема на последнем веб-сайте.

Вот мой URL. Когда я нажимаю на свой параметр, он показывает результат на следующей странице, простоотправка на другую страницу и отображение результата на другой странице

Вот мой тест

Однако, когда я нажимаю на кнопку из моего приложения, так как здесь у меня нетвозможность публикации, это только выборка html запрашиваемой страницы, которая, очевидно, является моей тестовой ссылкой HTML, упомянутой выше, которая на самом деле имеет параметр в URL для получения результата.

Как я могу справиться с этой ситуацией?Пожалуйста, дайте мне подсказку.

Спасибо

вот мой код C #, я использую HTMLAgality

String url;
HtmlWeb hw = new HtmlWeb();
HtmlDocument doc;
url = "http://mysampleURL";
doc = hw.Load(url);

Ответы [ 3 ]

3 голосов
/ 26 мая 2010

Используйте класс WebClient для публикации формы первой страницы с ожидаемыми входными значениями. Входные значения могут быть найдены в источнике первой страницы, но также возможно захватить их, используя Fiddler, который является хорошим инструментом для этих сценариев.

Пример:

NameValueCollection values = new NameValueCollection();
values.Add("action","hotelPackageWizard@searchHotelOnly");
values.Add("packageType","HOTEL_ONLY");
// etc..
WebClient webclient = new WebClient();
webclient.Headers.Add("Content-Type","application/x-www-form-urlencoded");
byte[] responseArray = webclient.UploadValues("http://www.expedia.com/Hotels?rfrr=-905&","POST", values);
string response = System.Text.Encoding.ASCII.GetString(responseArray);
2 голосов
/ 26 мая 2010

Если для ресурса требуется POST, вы ДОЛЖНЫ отправить POST.

Это довольно простая задача. Вот пример из блога Рика Строля . Код немного простоват, но работает и поможет вам двигаться в правильном направлении

string lcUrl = "http://www.west-wind.com/testpage.wwd";
HttpWebRequest loHttp =
   (HttpWebRequest) WebRequest.Create(lcUrl);

// *** Send any POST data
string lcPostData =
   "Name=" + HttpUtility.UrlEncode("Rick Strahl") +
   "&Company=" + HttpUtility.UrlEncode("West Wind ");

loHttp.Method="POST";
byte [] lbPostBuffer = System.Text.           
                       Encoding.GetEncoding(1252).GetBytes(lcPostData);
loHttp.ContentLength = lbPostBuffer.Length;

Stream loPostData = loHttp.GetRequestStream();
loPostData.Write(lbPostBuffer,0,lbPostBuffer.Length);
loPostData.Close();

HttpWebResponse loWebResponse = (HttpWebResponse) loHttp.GetResponse();

Encoding enc = System.Text.Encoding.GetEncoding(1252);

StreamReader loResponseStream =
   new StreamReader(loWebResponse.GetResponseStream(),enc);

string lcHtml = loResponseStream.ReadToEnd();

loWebResponse.Close();
loResponseStream.Close();
0 голосов
/ 06 декабря 2011

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

Затем я исследовал Selenium, и мне это нравится. Есть 2 вещи - 1) установить Selenium IDE (работает только в Firefox). 2) Установите Selenium RC Server

После запуска Selenium IDE перейдите на сайт, который вы пытаетесь автоматизировать, и начните записывать события, которые вы делаете на сайте. Думайте об этом как о записи макроса в браузере. После этого вы получите код для вывода на нужный язык.

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

Я загрузил ppt, который сделал некоторое время назад. Это должно сэкономить вам много времени- http://www.4shared.com/get/tlwT3qb_/SeleniumInstructions.html

В приведенной выше ссылке выберите вариант обычной загрузки.

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

...