簡體   English   中英

如何從網頁中提取信息?

[英]How do I extract info from a webpage?

我想從網站的首頁收集一些數據。 我可以很容易地瀏覽每一行,它只是我感興趣的一個特定的一行。所以我想確定正確的行並提取數字,在這種情況下是324.我怎么能這樣做?

<h2><a href="/mmp/it/su/">Weather</a></h2> <span class="jix_channels_count">(324)</span><br><p class="jix_channels_desc">Prog&oslash;r, su, si&oslash;r, tester</p>

下載內容后,使用HTML Agility Pack等HTML解析器來標識屬於jix_channels_count類的span元素。

另一個選擇是SgmlReader

你用regex標記了你的問題 - 我全心全意地建議你不要采取這個方向。

建議的方法(使用SgmlReader)或多或少地如此:

var url = "www.that-website.com/foo/";
var myRequest = (HttpWebRequest)WebRequest.Create(url);
myRequest.Method = "GET";
WebResponse myResponse = myRequest.GetResponse();                
var responseStream = myResponse.GetResponseStream();
var sr = new StreamReader(responseStream, Encoding.Default);
var reader = new SgmlReader
             {
                 DocType = "HTML",
                 WhitespaceHandling = WhitespaceHandling.None,
                 CaseFolding = CaseFolding.ToLower,
                 InputStream = sr
             };
var xmlDoc = new XmlDocument();
xmlDoc.Load(reader);
var nodeReader = new XmlNodeReader(xmlDoc);
XElement xml = XElement.Load(nodeReader); 

現在,您可以使用LINQ to XML(遞歸地或以其他方式)查找具有值等於jix_channels_count的屬性classspan元素,並讀取該元素的值。

用正則表達式解析html頁面是錯誤的。 如果您知道單個html行的確切結構,仍然可以使用正則表達式而不必將該行視為html代碼。

假設數字始終在括號內,並且帶有jix_channels_count類的范圍:

Match match = Regex.Match(htmlLine, @"(\<span[^>]*class=""jix_channels_count[^>]*\>\()([^)]+)(\))", RegexOptions.IgnoreCase);
if (match.Success)
{
    string number = match.Groups[2].Value;
}

暫無
暫無

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

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