Я разрабатываю консольное приложение для веб-скребка, используя c#, и у меня, похоже, возникают проблемы с получением определенного текста на странице с использованием того же объекта, а не с созданием нового.
Так, как я Я делаю это прямо сейчас ниже:
public static async void GetPosts()
{
var siteUrl = "https://news.ycombinator.com/";
HttpClient httpClient = new HttpClient();
var data = await httpClient.GetStringAsync(siteUrl);
var htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(data);
var postsHTML = htmlDocument.DocumentNode.Descendants("table")
.Where(node => node.GetAttributeValue("class", "")
.Equals("itemlist")).ToList();
var postList = postsHTML[0].Descendants("tr")
.Where(node => node.GetAttributeValue("class", "")
.Equals("athing")).ToList( );
//var postSubText = postsHTML[0].Descendants("td")
//.Where(node => node.GetAttributeValue("class", "")
//.Equals("subtext")).ToList();
foreach (var post in postList)
{
var storylink = post.Descendants("a")
.Where(node => node.GetAttributeValue("class", "")
.Equals("storylink")).FirstOrDefault();
Console.WriteLine("Title: " + storylink.InnerText);
Console.WriteLine("URI: " + storylink.GetAttributeValue("href", ""));
// var subtext = post.Descendants("td")
// .Where(node => node.GetAttributeValue("class", "")
// .Equals("hnuser ")).FirstOrDefault();
// Console.WriteLine("Author: " + subtext.InnerText);
Console.WriteLine();
}
}
}
}
//foreach (var subText in postSubText)
//{
//Console.WriteLine("Author: " + subText.Descendants("a")
// .Where(node => node.GetAttributeValue("class", "")
// .Equals("hnuser")).FirstOrDefault().InnerText);
// Console.WriteLine();
//}
Теперь, если вы посмотрите на объект postlist, который в идеале приносит все сообщения по этой ссылке. Теперь по какой-то причине автор не может получить доступ к комментариям et c под тем же объектом. Мне нужно создать новый объект массивов для других текстовых элементов, которые я хочу получить, поэтому мне нужно создать еще один для каждого l oop. Есть ли способ, которым это можно сделать за один l oop? Сначала я подумал о слиянии двух массивов, но это почему-то не сработало. Когда я использую объект для подтеста, который я создаю в для каждого l oop, я не получаю обратно автора, я получаю нулевое возвращение.