解析html以获取数据

时间:2010-09-06 16:27:47

标签: html-parsing

我遇到解析html的问题,我想从中获取数据

<td id="Company" style="border-bottom-width: 0px; padding-left: 5px">
<strong>ABC</strong>
</td>

所以我需要的数据当然只是“ABC”,我尝试了以下解析规则,但它不起作用

/<td id=\"Company\" style=\"border-bottom-width: 0px; padding-left: 5px\">
<strong>(.*)<\/strong>
<\/td>/i

任何人都可以提供帮助并熟悉这个?

3 个答案:

答案 0 :(得分:2)

你真的不应该使用正则表达式来解析html。它总是陷入一个纠结的混乱中。

使用具有整洁功能的库,如Beautiful Soup,JTidy,nekohtml,....然后遍历DOM树(或处理sax事件)以获取标签的内容。

然而,一旦完成HTML / XML解析,正则表达式就可以很好地从岩石中获取金块。

答案 1 :(得分:1)

您可以尝试使用此正则表达式来获取嵌套在单元格中的STRONG标记中的文本:

/<td\s*id="Company"[^>]*>\s*<strong>(.*?)</strong>\s*</td>/ms

答案 2 :(得分:0)

简单使用HtmlAgilityPack

HtmlDocumet doc= new HtmlDocument();
doc.loadHtml("<td id="Company" style="border-bottom-width: 0px; padding-left: 5px">
<strong>ABC</strong>
</td>");

HtmlNode node= doc.DocumentNode.selectSingleNode("//strong");

if(node!=null)
     String value= node.innerText;// value have ABC

如果你必须从网络上获取HTML

var request = (HttpWebRequest)WebRequest.Create("URL");
var response= (HttpWebResponse)request.getresponse();

 using (var stream = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(1252))) // you could change encoding
                    {
                        output = stream.ReadToEnd(); // output now have html in string form
                    }

outpul变量包含字符串泡沫中的html,您可以使用此字符串传递给doc.loadHtml(输出);

如果想了解更多信息google'htmlagilitypack'和'HtmlDocument':)