gpt4 book ai didi

c# - 使用 Html Agility Pack 从网页中的表中获取值而不使用 "SelectNode'

转载 作者:行者123 更新时间:2023-11-27 22:28:17 46 4
gpt4 key购买 nike

我正在尝试使用 Html Agility Pack 获取“事务并获取 url”的全部值。当我使用谷歌检查 html 源代码时,我能够看到带有 url 的完整交易 ID。我的问题是如何获取所有事务的全部值(value)以及与它们关联的 url 并将它们添加到我的数据网格中使用异步。我无法使用“SelectNode”,因为 Windows 商店应用程序不支持它。## 标题 ##

这是网站的网址:http://explorer.litecoin.net/address/LeDGemnpqQjrK8v1s5HZKaDgjgDKQ2MYiK

async private void GetTransactions()
{
url = "http://explorer.litecoin.net/address/LeDGemnpqQjrK8v1s5HZKaDgjgDKQ2MYiK";
string html;

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
try
{
WebResponse x = await req.GetResponseAsync();
HttpWebResponse res = (HttpWebResponse)x;
if (res != null)
{
if (res.StatusCode == HttpStatusCode.OK)
{
Stream stream = res.GetResponseStream();
using (StreamReader reader = new StreamReader(stream))
{
html = reader.ReadToEnd();
}
HtmlDocument htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(html);

var tsTable = htmlDocument.DocumentNode.ChildNodes["html"].ChildNodes["body"].ChildNodes["div"].
ChildNodes["div"].ChildNodes["div"].ChildNodes["table"].InnerHtml;

int n = 2;
var tsRow = tsTable.Split(Environment.NewLine.ToCharArray()).Skip(n).ToArray();

for (var index = 1; index < tsRow.Count(); index++)
{

}
}
}
}
catch
{
MessageDialog messageDialog =
new MessageDialog("A tear occured in the space-time continuum. Please try again when all planets in the solar system are aligned.");
}
}
<telerikGrid:RadDataGrid Grid.RowSpan="1"  ItemsSource="{Binding Data}" IsSynchronizedWithCurrentItem="True" AlternateRowBackground="AliceBlue" Background="White" Grid.Row="2" 
UserEditMode="Inline" UserGroupMode="Disabled" VerticalAlignment="Bottom" AutoGenerateColumns="False" Height="294" Grid.ColumnSpan="2">
<telerikGrid:RadDataGrid.GroupDescriptors>
<telerikGrid:PropertyGroupDescriptor PropertyName="Group"/>
</telerikGrid:RadDataGrid.GroupDescriptors>
<telerikGrid:RadDataGrid.Columns>
<telerikGrid:DataGridNumericalColumn PropertyName="Id" CanUserEdit="False" CanUserFilter="False" Header="#" SizeMode="Fixed" Width="40"/>
<telerikGrid:DataGridTextColumn PropertyName="pnDate" CanUserFilter="False" Header="Date" CellContentFormat="{}{0,0:dd.MM.yyyy}"/>
<telerikGrid:DataGridNumericalColumn PropertyName="pnType" CanUserFilter="False" Header="Type"/>
<telerikGrid:DataGridTextColumn PropertyName="pnAddress" CanUserFilter="False" Header="Address"/>
<telerikGrid:DataGridDateColumn PropertyName="pnAmount" CanUserFilter="False" Header="Amount"/>
</telerikGrid:RadDataGrid.Columns>
</telerikGrid:RadDataGrid>

最佳答案

SelectNode(带有 XPath 查询)只是做它自己的事情,遍历节点并匹配它们。您只需手动执行此操作,方法是查看 HTML 本身并构建一条路径以获取您想要的内容。

var table = htmlDocument.DocumentNode.ChildNodes["html"].ChildNodes["Body"].ChildNodes[0].ChildNodes[0].ChildNodes[0].ChildNodes["Table"];

现在您已经有了表格(并且您可以更具体地使用 ChildNode,例如查找具有特定类属性值的 Div),您可以开始查看行。第一行是标题,我们不关心这个。

// The first table row is index 0 and looks like this:
// <tr><th>Transaction</th><th>Block</th><th>Approx. Time</th><th>Amount</th><th>Balance</th><th>Currency</th></tr>
// It is the column headers, each <th> node represents a column. The foreach below starts at index 1, the first row of real data...
foreach(var index = 1; index < table.ChildNodes.Count; index++)
{
// a row of data looks like:
// <tr><td><a href="../tx/513.cut for space.b4a#o1">5130f066e0...</a></td><td><a href="../block/c3.cut for space.c9c">468275</a></td><td>2013-11-28 09:14:17</td><td>0.3</td><td>0.3</td><td>LTC</td></tr>
// each <td> node inside of the row, is the matching data for the column index...
var row = table.ChildNodes[index];
var transactionLink = row.ChildNodes[0].ChildNodes["a"].Attributes["href"].Value;
var transactionText = row.ChildNodes[0].ChildNodes["a"].InnerText;

// Other variables for the table row data...
// Here is one more example
var apporxTime = row.ChildNodes[2].InnerText;
}

关于c# - 使用 Html Agility Pack 从网页中的表中获取值而不使用 "SelectNode',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20907966/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com