Устранение неполадок .HTM файл - PullRequest
2 голосов
/ 21 октября 2010

Я только что начал удалять основной текст с веб-страниц и в настоящее время использую библиотеку HTMLAgilityPack C #.У меня был некоторый успех с boxscores от rivals.yahoo.com (спорт - это мое дело, так почему бы не поцарапать что-нибудь интересное?), Но я застрял на страницах с обзорами игр НХЛ.Я думаю, что это довольно интересная проблема, поэтому я бы опубликовал ее здесь.

Страница, которую я тестирую, выглядит следующим образом: http://www.nhl.com/scores/htmlreports/20102011/GS020079.HTM

На первый взгляд, это выглядит как простой текст без ajaxили вещи, чтобы испортить простой скребок.Тогда я понимаю, что не могу щелкнуть правой кнопкой мыши из-за некоторого JavaScript, поэтому я обхожу это вокруг.Я щелкаю правой кнопкой мыши в Firefox и получаю xpath домашней команды, используя XPather, и получаю:

/html/body/table[@id='MainTable']/tbody/tr[1]/td/table[@id='StdHeader']/tbody/tr/td/table/tbody/tr/td[3]/table[@id='Home']/tbody/tr[3]/td

Когда я пытаюсь получить этот узел / внутренний текст, htmlagilitypack не найдет его.Кто-нибудь видит что-то странное в исходном коде страницы, которое может остановить меня?

Я новичок в этом и все еще учусь, как люди могут помешать мне разобраться, любые советы или рекомендации приветствуются!

ps Я соблюдаю все правила сайта, касающиеся ботов и т. Д., Но я заметил это странное поведение и расценил его как вызов.

Ответы [ 2 ]

1 голос
/ 21 октября 2010

Ладно, похоже, в моих xpath есть tbody. Когда я удаляю эти tbodys вручную из xpath, HTMLAgilityPack может справиться с этим.

Я все еще хотел бы знать, почему я получаю неправильные xpaths, но сейчас я ответил на мой вопрос.

0 голосов
/ 21 октября 2010

Я думаю, что если мои знания xpath не содержат ошибок (вероятно), проблема в узле / tbody в вашем выражении xpath.

Когда я делаю

 string test = string.Empty;
StreamReader sr = new StreamReader(@"C:\gs.htm");
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.Load(sr);
sr.Close();
sr = null;
string xpath = @"//table[@id='Home']/tr[3]/td";
test = doc.DocumentNode.SelectSingleNode(xpath).InnerText;

Это отлично работает .. возвращает
"COLUMBUS BLUE JACKETSGame 5 Home Game 3"
я надеюсь, что это строка, которую вы хотели.

Изучив HTML, я не смог найти /tbody.

...