Я написал статью об этом, используя ASP.NET MVC, она должна вам помочь: Введение в парсинг веб-страниц с помощью HttpWebRequest с использованием ASP.NET MVC 3
Сканирование веб-страниц – это анализ этих страниц для извлечения фрагментов информации в структурированном виде. Это также относится к созданию программного интерфейса, API, который взаимодействует с сайтом через интерфейс HTML, предназначенный для людей.
Пожалуйста, не думайте, что ваша программа введет имя пользователя и пароль в соответствующие текстовые поля, а затем нажмет кнопку входа, чтобы вы могли войти на сайт.
Веб-скрейпинг не происходит таким образом.
Вам нужно изучить, как веб-сайт размещает имя пользователя и пароль для входа, а затем, используя свой код, вам нужно сделать то же самое, чтобы получить файл cookie. На каждом этапе, а точнее на каждой странице, вам нужно будет увидеть, как работает веб-сайт с помощью Firebug или Chrome dev tool, а затем отправить данные POST или GET соответственно, чтобы получить то, что вы хотите.
Ниже приведено то, что я написал для сбора данных с моего веб-сайта WordPress. Я добавил комментарии везде, где это применимо, чтобы код было легче читать.
Ниже приведены константы, которые вам нужно определить: «UserName» и «Pwd» — это данные для входа в мою учетную запись WordPress, «Url» — это URL-адрес страницы входа, а «ProfileUrl» — это адрес страницы, на которой находятся данные профиля. показано.
const string Url = "http://yassershaikh.com/wp-login.php";
const string UserName = "guest";
const string Pwd = ".netrocks!!"; // n this not my real pwd :P
const string ProfileUrl = "http://yassershaikh.com/wp-admin/profile.php";
public ActionResult Index()
{
string postData = Crawler.PreparePostData(UserName, Pwd, Url);
byte[] data = Crawler.GetEncodedData(postData);
string cookieValue = Crawler.GetCookie(Url, data);
var model = Crawler.GetUserProfile(ProfileUrl, cookieValue);
return View(model);
}
I had created a static class called “Crawler”, here’s the code for it.
// preparing post data
public static string PreparePostData(string userName, string pwd, string url)
{
var postData = new StringBuilder();
postData.Append("log=" + userName);
postData.Append("&");
postData.Append("pwd=" + pwd);
postData.Append("&");
postData.Append("wp-submit=Log+In");
postData.Append("&");
postData.Append("redirect_to=" + url);
postData.Append("&");
postData.Append("testcookie=1");
return postData.ToString();
}
public static byte[] GetEncodedData(string postData)
{
var encoding = new ASCIIEncoding();
byte[] data = encoding.GetBytes(postData);
return data;
}
public static string GetCookie(string url, byte[] data)
{
var webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2";
webRequest.AllowAutoRedirect = false;
Stream requestStream = webRequest.GetRequestStream();
requestStream.Write(data, 0, data.Length);
requestStream.Close();
var webResponse = (HttpWebResponse)webRequest.GetResponse();
string cookievalue = string.Empty;
if (webResponse.Headers != null && webResponse.Headers["Set-Cookie"] != null)
{
cookievalue = webResponse.Headers["Set-Cookie"];
// Modify CookieValue
cookievalue = GenerateActualCookieValue(cookievalue);
}
return cookievalue;
}
public static string GenerateActualCookieValue(string cookievalue)
{
var seperators = new char[] { ';', ',' };
var oldCookieValues = cookievalue.Split(seperators);
string newCookie = oldCookieValues[2] + ";" + oldCookieValues[0] + ";" + oldCookieValues[8] + ";" + "wp-settings-time-2=1345705901";
return newCookie;
}
public static List<string> GetUserProfile(string profileUrl, string cookieValue)
{
var webRequest = (HttpWebRequest)WebRequest.Create(profileUrl);
webRequest.Method = "GET";
webRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2";
webRequest.AllowAutoRedirect = false;
webRequest.Headers.Add("Cookie", cookieValue);
var responseCsv = (HttpWebResponse)webRequest.GetResponse();
Stream response = responseCsv.GetResponseStream();
var htmlDocument = new HtmlDocument();
htmlDocument.Load(response);
var responseList = new List<string>();
// reading all input tags in the page
var inputs = htmlDocument.DocumentNode.Descendants("input");
foreach (var input in inputs)
{
if (input.Attributes != null)
{
if (input.Attributes["id"] != null && input.Attributes["value"] != null)
{
responseList.Add(input.Attributes["id"].Value + " = " + input.Attributes["value"].Value);
}
}
}
return responseList;
}
Надеюсь это поможет.
person
Yasser Shaikh
schedule
05.08.2013