Форум сайта python.su
Есть форум IPBoard
В нем (на сколько я понял) есть встроенный чат shoutbox написанный на JS
Подскажите или поделитесь мыслями, какой инструментарий использовать для того что бы реализовать консольный клиент к этому чату максимально просто?
Привязываться к HTTP и парсингу HTML файла или можно как то напрямую обращаться к тем же внутренним функциям shoutbox.js что бы получить список сообщений или отправить месадж.
В данном направлении я смело могу сказать что полный ноль.
Если кто даст хороший линк - отдельное спасибо!
На данный момент даже нагуглить толком ничего не удалось!
Единственнное что нашел - похожий проэкт
http://forum.hellroom.ru/index.php?topic=19369.0
Но там все сильно иначе
Офлайн
если там JS чат, то там все делается get да post запросы. С помощью инструментов браузера или расширения типа FireBug можно подсмотреть за ходом работы и , наряду с исходным кодом чата на js, узнать какие запросы он шлет. В питоне понадобится http библиотека, requests думаю будет легко и просто. В качестве интерфейса можно построить что то вменяемое на ncurses.
P.S. сам глазами не смотрел, но в общих чертах такой вариант вижу.
Офлайн
Ну на сколько пока удалось понять - чат этот никаких XML не возвращает! А просто выплевывает HTML .
Вот вопрос - как бы тогда фильтровать данные что бы получать только то что нужно?
Я понимаю что вопросы очень простые но для меня они очень сложные!
Офлайн
ZerG
ответ видимо парсинг html. Для этого есть lxml, BeautifulSoup и ряд других. Я пользовался BS, достаточно туториал проглядеть на оф сайте, и применять на практике. В общем все возможно и, наверняка, не так сложно как сейчас кажется
Офлайн
Да собственно к етому и пришел…
Конечно идейнее было бы как то дергать функции напрямую из JS файла - но это пока что какойто запредельный уровень
Офлайн
Вобщем никак не удается справиться с элементарной задачей - распарсить файл!
Код файла:
<tr class='row1'> <td id='shoutbox-shouts-td' valign='top' class='altrow'> <div id='shoutbox-shouts' style='height:406px;overflow:auto;'> <table id='shoutbox-shouts-table'> <tbody> <tr class='row2' id='shout-row-19835'> <td style='width: 1%; white-space: nowrap;'> <a href="#" class="at_member" data-store="kobzar" title="Insert member's name into Shout">@</a> <a hovercard-ref="member" hovercard-id="21788" data-ipb="noparse" data-ipb="noparse" class="_hovertrigger url fn name " href='http://lanos.com.ua/forum/user/217-kobzar/' title='Просмотр профиля'><span itemprop="name"><span style='color:#000000;font-weight:bold;'>kobzar</span></span></a> </td> <td style='width: 1%; white-space: nowrap;'>:</td> <td style='width: 98%;'> <span class='right desc' title=''>(03/03/15 - 08:18:51)</span> <span class='shoutbox_text'>Фтарой!</span> </td> </tr><tr class='row2' id='shout-row-1734'> <td style='width: 1%; white-space: nowrap;'> <a href="#" class="at_member" data-store="lyolik" title="Insert member's name into Shout">@</a> <a hovercard-ref="member" hovercard-id="574" data-ipb="noparse" data-ipb="noparse" class="_hovertrigger url fn name " href='http://lanos.com.ua/forum/user/574-lyolik/' title='Просмотр профиля'><span itemprop="name"><span style='color:#0000ff;font-weight:bold;'>lyolik</span></span></a> </td> <td style='width: 1%; white-space: nowrap;'>:</td> <td style='width: 98%;'> <span class='right desc' title=''>(03/03/15 - 08:13:56)</span> <span class='shoutbox_text'>Утро доброе!</span> </td> </tr>
# -*- coding: utf-8 -*- from lxml import html import requests page = requests.get('http://lanos.com.ua/forum/shoutbox/') tree = html.fromstring(page.text) data = tree.xpath('//span[@class="right desc"]/text()') mess = tree.xpath('//span[@class="shoutbox_text"]/text()')
Офлайн
У меня в ответе почему-то нет тегов
<a hovercard-ref="member"...
ZerGНесколько многословно:
Помогите распарсить
import requests from lxml.etree import XPath from lxml.html import fromstring def get_chat_rows(): page = requests.get('http://lanos.com.ua/forum/shoutbox/') tree = fromstring(page.text) parts = XPath("//tr/*/a/@href|//tr/*/span/@style|//tr/*/span/text()|//tr/*/span/a/text()") parts = parts(tree)[1:] row = [] for part in parts: if part == "#": yield row row[:] = [] continue row.append(part) for row in get_chat_rows(): print(row[:3] + ["\n".join(row[3:])])
Отредактировано pyuser (Март 4, 2015 05:51:30)
Офлайн
Спасибо попробую. У вас его нет потому что вы не зарегистрированы
Офлайн