【发布时间】:2018-11-16 08:36:29
【问题描述】:
我目前正在使用 HtmlAgilityPack 制作一个 C# 控制台应用程序,我正在尝试获取网页上链接的参数值。所以基本上我有一个网页,在那个页面上有一堆链接。其中一个链接有一个名为“&pagenumber=[some number]”的参数。我想要得到的是&pagenumber= 之后的值并将其保存到一个 int 变量中。
步骤:
转到网站 (http://forum.tibia.com/forum/?action=board&boardid=25&threadage=-1)
在页面底部的 url 中查找文本“Last Page”:
<a href="http://forum.tibia.com/forum/?action=board&amp;boardid=25&amp;threadage=-1&amp;pageitems=30&amp;pagenumber=974">Last Page</a>
从“pagenumber”(本例中为“974”)中获取参数值
将其保存到整数变量
到目前为止我的代码:
string PageLink = "http://forum.tibia.com/forum/?action=board&boardid=25&threadage=-1";
Task.Run(async () =>
{
using (var client = new HttpClient())
{
// Load the html of the page
var html = await client.GetStringAsync(PageLink);
var document = new HtmlAgilityPack.HtmlDocument();
document.LoadHtml(html);
// Find the "Last Page" link at bottom of page
var lastPageLink = document.DocumentNode.Descendants("a").First(x => x.Attributes["href"].Value.Contains("&threadage=-1&pageitems=30&pagenumber=")).InnerHtml;
// Print out the pagenumber value
Console.WriteLine(lastPageLink);
}
}).Wait(1000);
但是,我的代码没有打印任何内容,所以我想知道我在这里做错了什么。我没有收到任何错误。我基本上试图找到所有链接(a-tag),我查看它们的“href”值,看看它是否包含“&threadage=-1&pageitems=30&pagenumber=”。如果是,它应该选择它的html代码。
所以现在,我想打印我的代码:http://forum.tibia.com/forum/?action=board&boardid=25&threadage=-1&pageitems=30&pagenumber=974
然后我可以继续使用正则表达式或其他东西来获得“974”。
url 中包含“board&boardid=25&threadage=-1”非常重要,因为其中还有其他带有“Last Page”值的链接。
【问题讨论】:
-
Task.Run(async () =>...).Wait(1000);看起来不对。不确定这是否是您的问题的原因。我猜你已经这样做了,因为你的控制台需要一个非异步钩子。这样做this way instead -
首先我需要获取值。所以我现在什至不会关注 .Wait() 。关键是,我无法从链接中获得任何价值。我想弄清楚我在那里做错了什么。我不应该寻找“a”链接,看看“href”是否包含该文本,然后返回整个href值吗?
-
如果我运行这段代码,任务会抛出空引用异常,因为在很多情况下
x.Attributes["href']是空的。
标签: c# html parsing console-application html-agility-pack