2016-07-08 2 views
-2

Приветствия Stackoverflow! Я ищу небольшую помощь в том, как разбирать html-документ. Моя задача состоит в том, что я не могу использовать стороннюю dll, такую ​​как HTML Agility pack и т. Д. К сожалению, это все должно быть сделано с помощью кода или refrences native для VS. Я смотрел на JSon, но я подумал, что, возможно, у кого-то был более простой способ. Я пытаюсь получить определенные данные с веб-страниц, таких как: http://www.wowhead.com/item=109118/blackrock-ore. Есть несколько разделов Ищу для извлечения данных из: Каждый раздел начинается с:Анализ HTML-документа для извлечения списка товаров

new Listview({template: 

и в этом разделе имеет «идентификатор». Я ищу списки «id» в отношении того, из какого типа элемент (заклинание, npc, объект и т. Д.).

К сожалению, мой набор навыков не соответствует этому или регулярному выражению. Я надеялся, что кто-то сможет мне помочь. Спасибо заранее за ваше время.

Редактирование: Я закончил использование регулярного выражения, чтобы найти все значения. Благодаря тем, которые помогли.

+3

Возможный дубликат [Что это лучший способ для разбора HTML в C#?] (Http://stackoverflow.com/ вопросы/56107/what-is-the-best-way-to-parse-html-in-c) посмотрите на ответ Алана, он показывает, как вы могли это сделать, не используя стороннюю библиотеку, не используйте регулярное выражение для синтаксического анализа известный язык, такой как HTML – abc123

+0

Этот ответ на самом деле не работает. В WebBrowser() нет метода браузера. –

ответ

0

Ну, сотни, так что пользователи расскажут вам not to regex HTML, но вы технически выскабливание содержание в <script>...</script> тегов, так что вы можете быть в состоянии уйти с этим.

Давайте сделаем попытку взлома.

После проверки источника страницы кажется, что JS в тегах <script>...</script> отформатирован последовательно. Это облегчает нашу работу.

template:\s'([^']++)',\sid:\s'([^']++)' 

Мы знаем, что атрибут id будет следовать атрибут template. Мы также знаем, что разработчик этой веб-страницы последовательно использовал одиночные кавычки, чтобы окружить его значениямии template. Поэтому мы будем захватывать содержимое в этом одинарные кавычки, которые следуют имена атрибутов template и id с помощью '([^']++)'

+0

Спасибо, что объяснили мне регулярное выражение. Вопрос, хотя. Как проанализировать элемент, если элемент существует? Так скажите, что на одной странице есть «заклинание», а другое - нет? Я хотел бы получить имя каждого элемента шаблона, а затем сохранить его в нем. Я знаю, что я вникаю в царство копий макаронных изделий, и я не болею, поскольку считаю, что я должен сам это выяснить, помогая мне убедиться в этом. Но, возможно, вы могли бы дать мне несколько примеров кода, чтобы я мог справиться с остальными? –

+1

Извините, но я не уверен, что вы просите. По элементу я предполагаю, что вы имеете в виду «Listview». Я также предполагаю, что под «именем каждого элемента шаблона» вы подразумеваете значение свойства template в «Listview». Это верно? – wpcarro

+1

Все это регулярное выражение - это захват значения атрибута 'template' объекта конструкции Listview и значения атрибута' id' на том же самом строительном объекте. У C#, скорее всего, есть способ получить доступ к «группам захвата», поэтому найдите все совпадения в источнике страницы, выполните итерацию через них и постройте необходимую структуру данных, которая вам нужна, используя группу захвата 1 (например, '$ 1') для имя элемента шаблона и вторую группу захвата (т.е. '$ 2') для идентификатора. Я не уверен, что смогу помочь вам в дальнейшем ... – wpcarro

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