C# 在html不一致时爬行html时遇到问题

C# 在html不一致时爬行html时遇到问题,c#,html,csquery,C#,Html,Csquery,我是csquery新手,在抓取html时遇到如下问题: <li id="Ingredient"> <span id="Amount" class="ingredient-amount">1 pound</span> <span id="Name" class="ingredient-name">sweet Italian Sausage </li> <li id="Ingredient"> <s

我是csquery新手,在抓取html时遇到如下问题:

<li id="Ingredient">
    <span id="Amount" class="ingredient-amount">1 pound</span>
    <span id="Name" class="ingredient-name">sweet Italian Sausage
</li>
<li id="Ingredient">
    <span id="Amount" class="ingredient-amount">3/4 pound</span>
    <span id="Name" class="ingredient-name">lean ground beef</span>
</li>
下面是我的代码:

for (int i = 0; i < dom.Select("#Ingredient").Length; ++i) {
    if (dom.Select("#Ingredient span#Amount")[i] != null)
            Console.WriteLine(dom.Select("#Ingredient span#Amount")[i].InnerHTML + " ");
    if (dom.Select("#Ingredient span#Name")[i] != null)
            Console.WriteLine(dom.Select("#Ingredient span#Name")[i].InnerHTML);
    Console.WriteLine(Environment.NewLine);
}
正如你所看到的,瘦肉碎牛肉上涨了。我想说不惜一切代价都要3/4英镑。一磅可以单独呆着。 我该怎么做? 我试过很多方法,但都不管用。所以我想做一些类似的事情:
对于每种成分,写下数量(如果存在)或名称(如果存在)。不要在其他成分上费事

html无论如何都是无效的。不允许重复id,循环只会返回具有匹配id的第一个元素。如果您解决了这个问题,那么为什么还要处理跨度呢?获取配料div并提取其全部内部文本,这可能已经为您提供了“1磅甜意大利香肠”。您的循环将只返回第一个id号匹配的元素。dom.SelectComponent spanAmount返回所有id匹配的元素,我正在使用[I]为了得到正确的元素,我将尝试第二个建议。谢谢,c做错了。DOM id在整个文档中必须是唯一的。由于必须是唯一的,id select只能返回一个元素。但是@MarcB,如何从1磅甜意大利香肠中提取1磅甜意大利香肠?我尝试了很多方法,但都没有成功
for (int i = 0; i < dom.Select("#Ingredient").Length; ++i) {
    if (dom.Select("#Ingredient span#Amount")[i] != null)
            Console.WriteLine(dom.Select("#Ingredient span#Amount")[i].InnerHTML + " ");
    if (dom.Select("#Ingredient span#Name")[i] != null)
            Console.WriteLine(dom.Select("#Ingredient span#Name")[i].InnerHTML);
    Console.WriteLine(Environment.NewLine);
}
1 pound lean ground beef
3/4 pound