C# 如何从网页中的链接读取url参数的内容?

C# 如何从网页中的链接读取url参数的内容?,c#,html,parsing,console-application,html-agility-pack,C#,Html,Parsing,Console Application,Html Agility Pack,我目前正在使用HtmlAgilityPack制作一个C控制台应用程序,我试图获取网页上链接的参数值。所以基本上我有一个网页,在这个网页上有很多链接。其中一个链接有一个名为&pagenumber=[some number]的参数。我试图获取&pagenumber=之后的值,并将其保存到int变量中 步骤: 访问网站 在页面底部的url中查找最后一页的文本: 在本例中,从pagenumber获取参数值974 将其保存为整数变量 到目前为止,我的代码是: 然而,我的代码没有打印任何东西,所以我想知道我

我目前正在使用HtmlAgilityPack制作一个C控制台应用程序,我试图获取网页上链接的参数值。所以基本上我有一个网页,在这个网页上有很多链接。其中一个链接有一个名为&pagenumber=[some number]的参数。我试图获取&pagenumber=之后的值,并将其保存到int变量中

步骤:

访问网站

在页面底部的url中查找最后一页的文本:

在本例中,从pagenumber获取参数值974

将其保存为整数变量

到目前为止,我的代码是:

然而,我的代码没有打印任何东西,所以我想知道我在这里做错了什么。我没有得到任何错误。我基本上是试图找到所有的链接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是非常重要的,因为其中还有其他带有最后一页值的链接

var lastPageLink = document.DocumentNode.Descendants("a").First(x => x.Attributes["href"] != null && x.Attributes["href"].Value.Contains("&threadage=-1&pageitems=30&pagenumber=")).Attributes["href"].Value;
两个变化,

我添加了x.Attributes[href]!=null&&到lambda语句的前面,以防止链接没有href属性时出现NullReferenceException。 将.InnerHtml切换为.Attributes[href].Value以打印URL而不是最后一页。 解析

你应该得到你想要的。我不知道正则表达式,所以如果你想使用它,你必须自己弄清楚


注意:我假设pagenumber是最后一个url参数,但并不总是正确的。因此,如果您使用此代码不仅仅是为了短期使用,我会相应地对其进行调整。

Task.Runasync=>..Wait1000;看起来不对。不确定这是否是你问题的原因。我猜你这么做是因为你的控制台需要一个非异步钩子。先把它做好我需要得到值。所以我甚至不会把注意力集中在这个问题上,等等。关键是,我无法从链接中获得任何值。我正试图找出我在那里做错了什么。我是否应该查找a链接,查看href是否包含该文本,然后返回整个href值?如果我运行此代码,任务将抛出null引用异常,因为在许多情况下x.Attributes[href']为null。我正在尝试获取最后一页的href。不是最后一页的实际文本,而是链接。更准确地说,我正试图得到该href中&pagenumber=之后的值。但是我想第一步是获得完整的链接。编辑:我看到你更新了你的帖子。那很好!非常感谢。现在我得到了完整的href。现在我只需要找到pagenumber的值。有没有一种方法可以直接在同一代码中执行?或者我需要将href值存储到字符串中,然后使用Regex查找pagenumber=xxxxx,所以基本上,在本例中,我尝试将974作为输出。而不是整个hrefvalue@LeeCheung是的,如果你想使用正则表达式,你只需要获取URL的字符串版本,即lastPageLink,然后运行它;
var lastPageLink = document.DocumentNode.Descendants("a").First(x => x.Attributes["href"] != null && x.Attributes["href"].Value.Contains("&threadage=-1&pageitems=30&pagenumber=")).Attributes["href"].Value;
var matchingString = "&threadage=-1&pageitems=30&pagenumber=";
var start = lastPageLink.IndexOf(matchingString) + matchingString.Length;
var end = lastPageLink.Length - start;
var pageNumber = lastPageLink.IndexOf(matchingString) >= 0 ? lastPageLink.Substring(start, end) : "Unknown";
Console.WriteLine("Page #: " + pageNumber);