2010-10-21 7 views
2

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

страница Я проверяю это: 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 не найти. Кто-нибудь видит что-то странное в исходном коде страницы, которое может остановить меня?

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

p.s. Я соблюдаю все правила сайта относительно ботов и т. Д., Но я заметил это странное поведение и видел это как вызов.

+0

хорошо, спасибо за отзыв о XPather, придется использовать. –

+0

может кто-нибудь еще зайти на эту страницу и попытаться получить xpath для домашней команды (columbus в верхнем правом углу) и вставить ее здесь, чтобы я мог сравнивать? – Saab

ответ

0

Я думаю, что если мое знание 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; 

Это работает отлично .. возвращает
«Коламбус Блю JACKETSGame 5 Главная 3 игры»
, который я надеюсь, это строка, которую вы хотели.

Рассмотрение html Я не смог найти/tbody.

1

Итак, похоже, что у моих xpaths есть tbody's in them. Когда я удаляю эти tbodys вручную из xpath, HTMLAgilityPack может справиться с этим.

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

+0

, вероятно, связано либо с браузером, либо с приложением xpather, я собираюсь проверить его, звучит интересно. –

Смежные вопросы