HTML Agility Pack和LINQ

c# html-agility-pack linq web-scraping

我想使用HAP從網站上的表中抓取數據,循環遍歷行以在列中找到與預定義字符串匹配的值,然後僅存儲匹配的行。然後我將有一個字典,列標題作為鍵,所選行的列文本作為值。

表格ex。

<table id="Table3">
<tbody><tr><td></td></tr>
<tr>
<td>ID</td>
<td>Last Name</td>
<td>First Name</td>
<td>Birth Date</td>
<td>Relation</td>
</tr>

<tr>
<td>nbsp;01&nbsp;</td>
<td>&nbsp;DUNN          &nbsp;</td>
<td>&nbsp;JOE          &nbsp;</td>
<td>&nbsp;19931209&nbsp;</font></td>
<td>&nbsp;Son&nbsp;</td>
</tr>

<tr>
<td>nbsp;02&nbsp;</td>
<td>&nbsp;SMITH          &nbsp;</td>
<td>&nbsp;MARY          &nbsp;</td>
<td>&nbsp;19950206&nbsp;</font></td>
<td>&nbsp;Daughter&nbsp;</td>
</tr>

<tr>
<td>nbsp;03&nbsp;</td>
<td>&nbsp;ROCKFORD          &nbsp;</td>
<td>&nbsp;BILL          &nbsp;</td>
<td>&nbsp;20000320&nbsp;</font></td>
<td>&nbsp;Son&nbsp;</td>
</tr>

</tbody></table>

如果我要匹配的DOB日期是20000320,那麼我想要Bill上的所有信息。

將標題標題添加到列表中沒有問題。我知道我沒有正確寫入用戶行。我所擁有的仍然是嘗試獲取行列表而不是一行。我遇到用戶行的另一個問題是內部文本會返回“&nbsp”,我不能只做一個.Replace所以我需要一種方法來刪除空格。我對所有建議持開放態度。更智能的方式來做所有這些等

List<string> headerList = new List<string>();
List<string> userList = new List<string>();

var htmlRows = htmlDoc.DocumentNode.SelectNodes("//*[@id=\"Table3\"]/tbody/tr");
if(htmlRows != null)
{
     // Add first row which contains column headings
     htmlRows[2]
         .Elements("td")
         .Select(td => td.InnerText.Trim())
         .ToList()
         .ForEach(header => headerList.Add(header));

     // Add user rows
     htmlRows
         .Skip(3)
         .Select(tr => tr.Elements("td")
             .Where(td => td.InnerText.Trim() == dteDOB))
             .ToList()
         .ForEach(row => userList.Add(row));

    for(int i = 0; i < headerList.Count; i++)
    {
        if(headerList.Count == userList.Count && userList[i] != null)
            dictValues.Add(headerList[i], userList[i]);                 
    }
}

一般承認的答案

您可以嘗試使用td中的值來選擇整個tr

//*[@id=\"Table3\"]/tbody/tr[td//text()[contains(., 'targetString')]]

看看這個

XPath選擇具有包含指定文本的單元格的表行



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因