#c# #xpath #web
#c# #xpath #веб
Вопрос:
string Url = "https://www.rottentomatoes.com/browse/dvd-all/?services=netflix_iw";
HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlWeb().Load(Url);
foreach ( var node in htmlDoc.DocumentNode.SelectNodes("/html/body[@class='body ']/div[@class='body_main container']/div[@id='main_container']/div[@id='main-row']/div[@id='content-column']/div[@id='movies-collection']/div[@class='mb-movies list-view']/div[@class='mb-movie']"))
{
string movieTitle = node.InnerText;
richTextBox1.Text = movieTitle System.Environment.NewLine;
}
Я хочу извлечь все названия фильмов из этого URL-адреса, перейдя по XPath. VS говорит, что у меня нет ссылки на объект. Почему? Можете ли вы попробовать для меня в этом конкретном случае?
Ответ №1:
Следующий фрагмент кода сработал для меня:
string Url = "https://www.rottentomatoes.com/browse/dvd-all/?services=netflix_iw";
HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlWeb().Load(Url);
IEnumerable<string> movieTitles = from movieNode in htmlDoc.DocumentNode.Descendants()
where movieNode.GetAttributeValue("class", "").Equals("movieTitle")
select movieNode.InnerHtml;
Он использует LINQ для доступа к узлам, содержащим название фильма.
Комментарии:
1. можете ли вы объяснить мне, что именно вы сделали в запросе linq? Я не знаю XPath, поэтому я рад, если вы мне объясните. Большое вам спасибо!!
2. @CRK У меня есть доступ к узлам
class=movieTitle
. Все эти узлы являются<h3>
элементами HTML и содержат название фильма. Это сработало для вас?3. Да! Для меня это тоже работает нормально. Последний вопрос: почему вы оставляете второй параметр в movieNode. GetAttributeValue(«class», «») пустой? а что, если у узла нет параметра «class»? LinQ пропустить это?
4. Я замечаю еще одну вещь: на веб-странице есть больше, чем первые результаты, которые возвращает запрос linq, потому что на веб-странице есть кнопка «Показать больше», которая показывает другие фильмы. Как я могу отслеживать все 380 фильмов на странице, а не только первые?
5. можете ли вы мне помочь??