Извлечение значений таблицы из HTML веб-страниц автоматически

Я использую MRTG для мониторинга использования CPU/MEM/ трафика устройств, и каждое устройство имеет разные порты / vlans / интерфейсы. Когда я хочу создать таблицу / Excel, показывающую статистику всех интерфейсов, я обнаружил, что это очень неэффективно, потому что мне нужно кликнуть около 400 веб-страниц и скопировать таблицы (входящий / исходящий трафик, Макс. / Ср. / Текущая загрузка ЦП, Макс. /Avg Соединения и т. Д.) Из HTML.

Мой вопрос: есть ли скрипты / инструменты для автоматизации этой работы? Извлечение определенных значений таблицы из каждой веб-страницы и заполнение таблицы / Excel.

2 ответа

Решение

Я наконец нашел расширение Firefox iMacros для Firefox очень полезным для записи и воспроизведения повторяющейся работы. Он работает хорошо и эффективно при извлечении данных из массивных веб-страниц с одинаковыми структурами.

Более того, в iMacros есть подробные руководства и примеры кодов. iMacros для Firefox бесплатен для личного и коммерческого использования, если вы беспокоитесь об этом (как и я).

Я настоятельно рекомендую iMacros, если вы хотите автоматизировать какую-то громоздкую работу!

Вы можете обнаружить, что есть лучшие способы получить нужные данные, чем анализ HTML-кода, сгенерированного MRTG (например, например, использование SNMP напрямую). Тем не менее, это может помочь, если действительно нужно проанализировать HTML:

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

Вот грубый пример, который выгружает все таблицы HTML на странице в CSV:

import sys
import csv
import urllib2

import BeautifulSoup

page    = urllib2.urlopen(sys.argv[1]).read()
soup    = BeautifulSoup.BeautifulSoup(page)
csvout  = csv.writer(sys.stdout)

for table in soup.findAll('table'):
    print '#'
    print '# Table'
    print '# Fields: ' + ','.join([tr.text for tr in table.findAll('th')])
    for row in table.findAll('tr'):
        csvout.writerow([tr.text for tr in row.findAll('td')])
    print

Предполагая, что у вас установлен Python, а также BeautifulSoup (pip install BeautifulSoup или же easy_install BeautifulSoup) и предполагая, что вы сохранили вышеуказанный код как htmltable2csv.py Вы можете отобразить все таблицы на странице следующим образом:

python htmltable2csv.py http://www.w3schools.com/tags/tag_table.asp
Другие вопросы по тегам