如何从网页中的 link 中读取 url 参数的内容?
How can I read the content of a url parameter from a link in a webpage?
我目前正在使用 HtmlAgilityPack 创建一个 C# 控制台应用程序,我试图在其中获取网页上 link 的参数值。所以基本上我有一个网页,在那个网页上有一堆 links。其中一个 link 有一个名为“&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&boardid=25&threadage=-1&pageitems=30&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);
但是,我的代码没有打印任何东西,所以我想知道我在这里做错了什么。我没有收到任何错误。我基本上试图找到所有 links(a-tag),我查看它们的 "href" 值,看看它是否包含“&threadage=-1&pageitems=30&pagenumber=”。如果是,它应该 select 它的 html 代码。
所以现在,我要打印我的代码:http://forum.tibia.com/forum/?action=board&boardid=25&threadage=-1&pageitems=30&pagenumber=974
然后我可以继续使用 Regex 或其他东西,以获得“974”。
url包含"board&boardid=25&threadage=-1"很重要,因为还有其他link里面有"Last Page"值
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;
两个变化,
- 我在 lambda 语句的前面添加了
x.Attributes["href"] != null &&
以防止 NullReferenceException
当 link 没有 href 属性时。
- 将
.InnerHtml
切换为 .Attributes["href"].Value
以打印 URL 而不是 Last Page
。
正在解析
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);
应该可以满足您的需求。我不知道正则表达式,所以如果你想使用它,你必须自己弄清楚。
注意:我假设页码将是最后一个 url 参数,但这并不总是正确的。因此,如果您使用此代码的目的不仅仅是短期使用,我会相应地对其进行调整。
我目前正在使用 HtmlAgilityPack 创建一个 C# 控制台应用程序,我试图在其中获取网页上 link 的参数值。所以基本上我有一个网页,在那个网页上有一堆 links。其中一个 link 有一个名为“&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&boardid=25&threadage=-1&pageitems=30&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);
但是,我的代码没有打印任何东西,所以我想知道我在这里做错了什么。我没有收到任何错误。我基本上试图找到所有 links(a-tag),我查看它们的 "href" 值,看看它是否包含“&threadage=-1&pageitems=30&pagenumber=”。如果是,它应该 select 它的 html 代码。
所以现在,我要打印我的代码:http://forum.tibia.com/forum/?action=board&boardid=25&threadage=-1&pageitems=30&pagenumber=974
然后我可以继续使用 Regex 或其他东西,以获得“974”。
url包含"board&boardid=25&threadage=-1"很重要,因为还有其他link里面有"Last Page"值
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;
两个变化,
- 我在 lambda 语句的前面添加了
x.Attributes["href"] != null &&
以防止NullReferenceException
当 link 没有 href 属性时。 - 将
.InnerHtml
切换为.Attributes["href"].Value
以打印 URL 而不是Last Page
。
正在解析
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);
应该可以满足您的需求。我不知道正则表达式,所以如果你想使用它,你必须自己弄清楚。
注意:我假设页码将是最后一个 url 参数,但这并不总是正确的。因此,如果您使用此代码的目的不仅仅是短期使用,我会相应地对其进行调整。