C#IronWebScraper可以迭代,但不能一次访问一个元素



库中的webscraper在htmlnodes中工作,这很难解释,但我有点刮标签,然后刮内部,我想像数组一样处理内部,这在这个库中是默认的,但问题是,我可以用一个"对于循环";像任何其他数组一样,但由于某种原因,我无法使用索引访问它。。。

这是我的代码与网站链接完全类似于图书馆使用的文档:

总的来说:

static void Main(string[] args) {
var scraper = new HelloScraper();
scraper.Start();
}

然后初始化:

public override void Init() {
this.LoggingLevel = WebScraper.LogLevel.None;
this.Request("https://1337x.to/sort-search/Aquaman/time/desc/1/", Parse);
}

现在,Parse给我带来了麻烦,我将对其进行拆分,以显示哪些有效,哪些无效。这项工作:

public override void Parse(Response response) {
foreach (var torrentLink in response.Css("tr")) {
HtmlNode[] torrentContents = torrentLink.Css("td");
for (int i = 0; i < torrentContents.Length; i++) {
Console.WriteLine($"{i}: {torrentContents[i].InnerText}");
}
Console.WriteLine();
}
}

为了更容易理解;"洪流";在这里这段工作代码产生:

0: Aquaman IMAX (2019) AC3 5.1 ITA.ENG 1080p H265 sub NUita.eng Sp33dy94 MIRCrew1
1: 7
2: 0
3: 8pm Oct. 2nd
4: 4.2 GB7
5: Sp33dy94

但是这段代码基本上是基于相同的数组来选择我需要的东西,我可以从for循环中看到索引:

public override void Parse(Response response) {
foreach (var torrentLink in response.Css("tr")) {
HtmlNode[] torrentContents = torrentLink.Css("td");
string torrentName = torrentContents[0].InnerText;
string torrentSeeds = torrentContents[1].InnerText;
string torrentSize = torrentContents[4].InnerText;
Console.WriteLine($"{torrentName} --> [Size:{torrentSize} | Seeds:{torrentSeeds}]");
Console.WriteLine();
}
}

这不会产生任何结果。。。控制台不显示错误,当我试图调试它时,它看起来就像我试图通过索引访问它一样;指向空引用";。

也许我遗漏了什么,但如果一个数组可以在for循环中通过索引访问,那么它也应该可以在它之外访问,我错了吗?这里有什么问题?

顺便说一句,我不知道1337x.to是否允许网络抓取,但我不打算也不打算在商业上或我自己使用它,它只是一个我选择练习的网站

在调试器中折腾了很多小时后,我得到了它,当我用for循环迭代时,它跳过空数组,第一个是空的,它是页表的标题,里面没有值。添加一个简单的if语句来检查长度是否大于0可以修复问题:

public override void Parse (Response response) {
foreach (var torrentLink in response.Css ("tr")) {
HtmlNode[] torrentContents = torrentLink.Css ("td");
if (torrentContents.Length > 0) {
string torrentName = torrentContents[0].InnerText;
string torrentSeeds = torrentContents[1].InnerText;
string torrentSize = torrentContents[4].InnerText;
Console.WriteLine ($"{torrentName} --> [Size:{torrentSize} | Seeds:{torrentSeeds}]");
Console.WriteLine ();
}
}
}

最新更新