crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Парсер HTML файла
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
trdm Дата 29.11.2009, 20:10
  Блин, я где-то нарывался на html парсер на основе бизона.
Вот бы его в либу оформить, можно было бы просто подключать к проекту.
++Norton++ Дата 29.11.2009, 14:16
  Сделал регулярку, как посоветовал rcdimon. Получилось вроде этого:
QRegExp rx("<a.+href.*=.*\"(.+?)\">(.+?)</a.*>");
while ((pos = rx.indexIn(Page, pos)) != -1) {

     parserList->append( rx.cap(1) );
     pos += rx.matchedLength();
}

Однако ничего не парсит :( С другой регуляркой работает нормально. Подскажите, дело в регулярке или нужно использовать не "rx.cap" а что-то другое?
++Norton++ Дата 21.11.2009, 22:52
  Спасибо за советы! Вот, кстати, пример куска хтмл файла:
 <tbody>
    <tr class="thead" valign="bottom">
      <td rowspan="1" width="80%">Text</td>
      <td align="right" width="20%">Some info:</td>
    </tr>    <tr class="list" bgcolor="#ffffff">
      <td>
        <a href="?cmd=words&amp;page=1&amp;inf=7423&amp;secret=deae3a1c7690f&amp;ps=%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B8">текст1</a>
      </td>
      <td align="right">5701375</td>
    </tr>    <tr class="list" bgcolor="#eeeeee">
      <td>
        <a href="?cmd=words&amp;page=1&amp;inf=12704&amp;secret=d115239573deae3a1c7690f&amp;ps=%D1%82%D0%B5%D0%BA%D1%81%D1%82">текст2</a>
      </td>
      <td align="right">5701027</td>
    </tr>    <tr class="list" bgcolor="#ffffff">
      <td>
        <a href="?cmd=words&amp;page=1&amp;inf=125704&amp;secret=67c115239573deae3a1c7690f&amp;ps=%D1%82%D0%B5%D0%BA%D1%81%D1%82%20%D0%BF%D0%B5%D1%81%D0%BD%D0%B8">текст3</a>
      </td>
      <td align="right">2804612</td>
    </tr>    <tr class="tlist" bgcolor="#eeeeee">
........

Вот. Из такого кода нужно выдрать текст1, текст2, текст3 а также те числа, что идут после ссылки, т.е. в теге td align=right.
Т.е. в данном примере после первой ссылки это 5701375, после второй 5701027, после третьей 2804612.
Заранее еще раз спасибо!
molchanoviv Дата 21.11.2009, 19:06
 
Цитата(kwisp @ 21.11.2009, 1:39) *
наверное регехпом можно попробовать.


+1024. Тоже хотел посоветовать QRegExp.
kwisp Дата 21.11.2009, 13:59
 
Цитата(++Norton++ @ 21.11.2009, 12:57) *
насчет регехпа думал, но так и не додумался как его применить в данном случае...

как вариант.
читаешь файл в QString.
далее тебе нужен такой regexp чтобы -- искал href=" пропускал все до ">"какой то текст"<"далее текст до открывающего тега(<bla>) какой то текст(<\bla>)
1. сказу надо учесть что в имени ссылки могут быть символы >,<
2. с помощью cap(int) вырезаешь все что нужно.

скинешь примеры файлов можно конкретные "примеры" выражения подобрать.
rcdimon Дата 21.11.2009, 13:58
 
Цитата
Собственно нужно спарсить текст (хотя бы в QString) находящийся на месте "ТекстДляПарсинга" и то, что за ним, т.е. 1234.
Подскажите, как это лучше всего будет сделать?
Просто никогда раньше парсеры не приходилось писать.


Немного не корректно поставлена задача. Как я понимаю "ТекстДляПарсинга" является текстом ссылки. То есть надо вынимать тексты ыылок. А что значит "и то, что за ним, т.е. 1234" я не понял. Но могу привести регулярку для работы со ссылками например.

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

<a.+href.*=.*"(.+?)">(.+?)</a.*>

++Norton++ Дата 21.11.2009, 12:57
  Спасибо, буду думать во всех направлениях, насчет регехпа думал, но так и не додумался как его применить в данном случае...
Может быть есть какие-нибудь догадки?
lioncub Дата 21.11.2009, 10:35
  kwisp, точно, все что меджду > < от body и не включая scripts
kwisp Дата 21.11.2009, 1:39
  по-моему не получится потому что хмл очень тебователен к закрывающим тегам... можно не загрузить документ...
наверное регехпом можно попробовать.
Litkevich Yuriy Дата 21.11.2009, 1:19
  Есть Несколько технологий:
SAX и DOM - руководство полностью переведено.
Есть ещё XQuery и XPath, возможно, для этой задачи могут быть удобнее, но только на английском
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 18:33