我需要从网站获取数据并将其保存为字符串

时间:2014-10-17 09:19:17

标签: c# regex

<td class="lineitem">964.00 oz</td>
<td class="lineitem" align="right" bgcolor="#141414"><font color="#33ff66">230.00</td>
<td class="lineitem" align="right">$460</td>      
<td class="lineitem" align="right">1.00</td>
<td class="lineitem" align="right">$2.00</td>

从此我想得到:964.00,230.00,460,1.00,2.00 并将它们保存为字符串以便稍后使用

提前致谢

我试过了:

string bleh = ("http://www.drugrunners.net/quickBuySummary.cfm?");
string[] qual = Regex.Split(bleh, "<td class=");
      for (int i = 1; i < qual.Length; i++)
         {
          switch (i)
      {
        case 1:
            Details[0] =  Regex.Split(qual[i], "\">")[0];
               button3.Text = Regex.Split(qual[i], "\">")[1]
         break;

5 个答案:

答案 0 :(得分:1)

您需要的是像HtmlAgilityPack这样的网络抓取工具 这里有一个例子

     HtmlDocument doc = new HtmlDocument();
     doc.Load("http://yourUrl")
    var findclasses = doc.DocumentNode.Descendants("td").Where(d => 
    d.Attributes.Contains("class") && d.Attributes["class"].Contains("lineitem")
);

答案 1 :(得分:0)

new System.Text.RegularExpressions.Regex("^<td class=\"lineitem\".*>(?<number>.*)</td>$")

将从您发布的行中分别捕获964.00盎司,230.00,$ 460,1.00和$ 2.00。

它确实要求您一次运行一行,并且您还必须弄清楚如何处理您的单位。

答案 2 :(得分:0)

您需要检索远程网页并“抓取”#39;它使用像html agility pack这样的库:

关于检索它,这个SO link非常有用:

protected void getHtml(string url){
    WebClient client = new WebClient();
    string downloadString = client.DownloadString(url);
    return downloadString;
}

然后,一旦你从字符串中创建一个html文档(不确定如何做,但应该是一个没脑子),你可以使用html agility pack and XPATH解析它;

最终,我认为你可以按照this CodeProject tutorial获得你想要的东西,并且你得到这样的东西:

protected void ClickMeButton_Click(object sender, EventArgs e){

    var document = getHtml("http://url.to.your/page");
    var tdTags = document.DocumentNode.SelectNodes("//td"); //use a xpath expression to select contents
    int counter = 1;
    if (aTags != null)
    {
        foreach (var aTag in aTags){
        myVarToSave = tdTag.InnerHtml ;
     }
}

答案 3 :(得分:0)

正则表达式模式可以是>\$?([\d\.]+).*<

意义:

  • 在&gt;之间搜索和&lt;
  • \ $?是可选的$
  • ()表示要匹配的子模式,返回为$ matches [1]
  • []表示要匹配的字符,+表示一个或多个
  • \ d是一个数字
  • \。是一个点
  • 。*是以下任何内容

在php中,

preg_match_all(
   '@>\\$*([\\d\\.]+)<@', 
   '<td class="lineitem">964.00 oz</td>
    <td class="lineitem" align="right" bgcolor="#141414"><font color="#33ff66">230.00</td>
    <td class="lineitem" align="right">$460</td>      
    <td class="lineitem" align="right">1.00</td>
    <td class="lineitem" align="right">$2.00</td>', 
   $matches
);

返回

$matches => array (
  0 => array (
    0 => '>964.00 oz<',
    1 => '>230.00<',
    2 => '>$460<',
    3 => '>1.00<',
    4 => '>$2.00<',
  ),
  1 => array (
    0 => '964.00',
    1 => '230.00',
    2 => '460',
    3 => '1.00',
    4 => '2.00',
  ),
)

答案 4 :(得分:0)

我的问题是,你在做什么(在你的例子中)是否有效?您的string bleh行告诉我其他情况。您显然正在处理需要身份验证的页面,因此您无法在HtmlDocument.Load上访问该文档。在你刮掉页面之前,这比做任何这些答案要困难一些。你需要弄明白:

  1. 如何正确执行HttpRequest
  2. 如何通过身份验证请求(cookies / postdata,无论涉及什么)。
  3. 如何获取所需页面的响应并使用HtmlAgilityPack
  4. 解析它

    您可以在S.O.上单独查找这些点。或其他地方。

    你可以采取其他路径并手动下载页面,如果它适合你,然后你可以做一个IO.File方法打开文件,你可以提供给HtmlDocument.LoadHtml(),这意味着你可以跳到3号。