Автоматизируйте загрузку данных с веб-сайта с помощью vb.net

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

Я хочу использовать VB.net для этой задачи, если кто-нибудь может нам помочь.

Заранее спасибо.


person user2652121    schedule 05.08.2013    source источник


Ответы (1)


Я написал статью об этом, используя 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
comment
Я пытался использовать скрипач, но я не могу понять его чтение. - person user2652121; 05.08.2013