Сохранение таблиц HTML в базу данных - PullRequest
3 голосов
/ 16 сентября 2008

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

Мне больше всего нравится Java и PHP, но на самом деле было бы полезно найти решение на любом языке.

РЕДАКТИРОВАТЬ: Для более подробной информации, UTA (Система автобусов Солт-Лейк-Сити) предоставляет расписание автобусов на своем веб-сайте. Каждое расписание отображается в таблице с указанием станций в заголовке и времени отправления в строках. Я хотел бы просмотреть расписание и сохранить информацию в таблице в форме, которую я затем смогу запросить.

Вот начальная точка для расписаний

Ответы [ 8 ]

3 голосов
/ 16 сентября 2008

Все зависит от того, насколько правильно ваш HTML для очистки? Если это действительный XHTML, вы можете просто использовать некоторые запросы XPath, чтобы получить все, что вы хотите.

Пример xpath в php: http://blogoscoped.com/archive/2004_06_23_index.html#108802750834787821

Вспомогательный класс для очистки таблицы в массив: http://www.tgreer.com/class_http_php.html

3 голосов
/ 16 сентября 2008

На эту тему есть хорошая книга: Spidering Hacks от Кевина Хеменвея и Тары Калишайн .

2 голосов
/ 16 сентября 2008

Я обнаружил, что языки сценариев обычно лучше подходят для выполнения таких задач. Я лично предпочитаю Python, но PHP тоже будет работать. Обрезка, измельчение и разбор строк в Java - это слишком много работы.

1 голос
/ 31 января 2011

Опасаясь начать дерьмовую бурю здесь, на SO, я бы предположил, что если формат таблицы никогда не изменится, вы можете просто покончить с использованием Regularexpressions для анализа и захвата необходимого контента.

1 голос
/ 11 ноября 2008

Если вам нужна форма таблицы csv, вы можете использовать это: используя python:

например, представьте, что вы хотите почистить котировки форекс в форме csv с какого-нибудь сайта, например: fxoanda

тогда ...

<code>from BeautifulSoup import BeautifulSoup
import urllib,string,csv,sys,os
from string import replace

date_s = '&date1=01/01/08'
date_f = '&date=11/10/08'
fx_url = 'http://www.oanda.com/convert/fxhistory?date_fmt=us'
fx_url_end = '&lang=en&margin_fixed=0&format=CSV&redirected=1'
cur1,cur2 = 'USD','AUD'
fx_url = fx_url + date_f + date_s + '&exch=' + cur1 +'&exch2=' + cur1
fx_url = fx_url +'&expr=' + cur2 +  '&expr2=' + cur2 + fx_url_end
data = urllib.urlopen(fx_url).read()
soup = BeautifulSoup(data)
data = str(soup.findAll('pre', limit=1))
data = replace(data,'[<pre>','')
data = replace(data,'
]», '') file_location = '/ Users / location_edit_this' имя_файла = расположение_файла + 'usd_aus.csv' file = open (имя_файла, "w") file.write (данные) file.close ()

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

1 голос
/ 16 сентября 2008

pianohacker пропустил модуль HTML :: TableExtract , который был разработан именно для такого рода вещей. Вам все еще нужно LWP , чтобы получить таблицу.

1 голос
/ 16 сентября 2008

Это было бы намного проще с Perl и следующими модулями CPAN:

CPAN, являющийся основным механизмом распространения модулей Perl, доступ к которому можно получить, например, с помощью следующей команды оболочки:

# cpan HTML::Parser

Если вы работаете в Windows, все будет интереснее, но вы все равно сможете это сделать: http://www.perlmonks.org/?node_id=583586

1 голос
/ 16 сентября 2008

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

Я предложил попытаться выяснить, есть ли у владельцев сайта опубликованный API (часто веб-службы) для извлечения данных из их системы. Если нет, то удачи тебе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...