Я пытаюсь очистить таблицу html и сохранить ее данные в базе данных. Какие стратегии / решения помогли вам приблизиться к этой программе.
Мне удобнее всего работать с Java и PHP, но на самом деле было бы полезно решение на любом языке.
Обновлено: Для более подробной информации, UTA (автобусная система Солт-Лейк-Сити) предоставляет расписание автобусов на своем веб-сайте. Каждое расписание отображается в таблице, в заголовке которой указаны станции, а в строках - время отправления. Я хотел бы просмотреть расписания и сохранить информацию в таблице в форме, которую я затем могу запросить.
Вот отправная точка для расписаний






По этой теме есть хорошая книга: Spidering Hacks от Кевина Хеменуэя и Тары Кэлишейн.
Все зависит от того, насколько правильно парсить ваш HTML? Если это действительный XHTML, вы можете просто использовать к нему несколько запросов XPath, чтобы получить все, что захотите.
Пример xpath в php: http://blogoscoped.com/archive/2004_06_23_index.html#108802750834787821
Вспомогательный класс для очистки таблицы от массива: http://www.tgreer.com/class_http_php.html
Раньше я пробовал очистить экран, но обнаружил, что он очень хрупкий, особенно с динамически сгенерированным кодом. Я нашел сторонний DOM-парсер и использовал его для навигации по исходному коду с помощью шаблонов сопоставления, подобных Regex, чтобы найти нужные мне данные.
Я предложил попытаться выяснить, есть ли у владельцев сайта опубликованный API (часто веб-службы) для получения данных из их системы. Если нет, то удачи тебе.
Я обнаружил, что языки сценариев обычно лучше подходят для выполнения таких задач. Лично я предпочитаю Python, но PHP тоже подойдет. Нарезка, измельчение и синтаксический анализ строк в Java - это слишком много работы.
Это было бы проще всего с Perl и следующими модулями CPAN:
CPAN является основным механизмом распространения модулей Perl и доступен, например, с помощью следующей команды оболочки:
# cpan HTML::Parser
Если вы работаете в Windows, все будет поинтереснее, но вы все равно можете это сделать: http://www.perlmonks.org/?node_id=583586
pianohacker упустил из виду модуль HTML :: TableExtract, который был разработан именно для такого рода вещей. Вам все равно понадобится LWP для получения таблицы.
Если вам нужна форма таблицы csv, вы можете использовать это: используя python:
например, представьте, что вы хотите очистить котировки форекс в форме CSV с какого-либо сайта, например: fxoanda
тогда...
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,'</pre>]','')
file_location = '/Users/location_edit_this'
file_name = file_location + 'usd_aus.csv'
file = open(file_name,"w")
file.write(data)
file.close()
как только вы получите его в этой форме, вы можете преобразовать данные в любую форму, которая вам нравится.
Рискуя начать здесь, на SO, дерьмовый шторм, я бы посоветовал, если формат таблицы никогда не изменится, вы могли бы просто уйти от использования Regularexpressions для синтаксического анализа и захвата нужного вам контента.
Прошло два с половиной года, а пятого буря не было. Туз.
К сожалению, на сайте нет API, иначе это было бы идеально.