簡體   English   中英

如何使用C#從HTML頁面抓取文本?

[英]How to scrape text from an html page using C#?

我有一個網頁,當導航到該網頁時,它僅返回一個簡單的文本值,例如數字100。我需要從頁面中獲取該值,因此可以在應用程序中使用它。 該應用程序是一個簡單的Windows Forms應用程序,上面帶有Web瀏覽器控件。

我已經嘗試了很多事情,但是它沒有抓住文本,好像它不存在一樣。 但是,如果我右鍵單擊並查看源,就可以找到它。

這不是那么困難...只是一些文字。

只是為了澄清文檔中不包含html,只有一個數字。 使用WebClient或WebRequest時,它不返回該值。

    private void RegisterWindow_Load(object sender, EventArgs e)
    {
        webBrowser1.Navigate("MYURL");
        webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);

    }

    void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        // Check and see if we have navigated to the final page.
        string registeredUrl = "MYURL";
        string currentPage = webBrowser1.Url.ToString();
        string response = string.Empty;

        if (webBrowser1.Url.ToString() == registeredUrl)
        {
            // Now parse the authkey from the url
            response = GetWebRequest(currentPage);
            MessageBox.Show(response);
        }
    }

    /// <summary>
    /// Send a Web Request and get a Web Response back. 
    /// This respons can be a valid URL, simple text response, or 
    /// HTML response.        
    /// </summary>
    /// <param name="url"></param>
    /// <returns></returns>
    public string GetWebRequest(string url)
    {
        var client = new WebClient();
        var content = client.DownloadString(url);

        return content;
    }

您應該能夠做一些簡單的事情:

var client = new WebClient();
var content = client.DownloadString("<YOUR URL>");
var number = Int32.Parse(content);

MSDN文檔DownloadString(string)

如果文檔僅包含沒有任何HTML的數字,則該方法應該起作用:

public string GetWebRequest()
{
    return webBrowser1.Document.Body.InnerText;
}

幾年前,我在.NET中寫了一篇有關Web抓取的博客文章。 您可以在那里嘗試這些技術。 希望它們不會過時。

例如:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

request.UserAgent = _UserAgent;
request.CookieContainer = cookies;  // optional

using (WebResponse response = request.GetResponse())
{
  using (Stream responseStream = response.GetResponseStream())
  {
    using (StreamReader reader = new StreamReader(responseStream))
    {
      html = reader.ReadToEnd();
    }
  }
}

請記住,您的瀏覽器正在發送User-Agent標頭,可能正在發送cookie,可能正在通過已配置的代理服務器等。特別是對於受保護的站點或Intranet站點,簡單的WebClient調用可能不足。 您可能需要按照@SLaks的建議對Fiddler進行一些檢查。

您可以將頁面HTML / TXT內容加載到字符串,然后使用字符串函數提取數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM