Я думаю, что необходимо считать Douglas Crockford Наследование Prototypal в JavaScript и Классическое Наследование в JavaScript.
Примеры от его страницы:
Function.prototype.method = function (name, func) {
this.prototype[name] = func;
return this;
};
Эффект? Это позволит Вам добавлять методы более изящным способом:
function Parenizor(value) {
this.setValue(value);
}
Parenizor.method('setValue', function (value) {
this.value = value;
return this;
});
я также рекомендую его видео: Усовершенствованный JavaScript.
можно найти больше видео на его странице: http://javascript.crockford.com/ В книге John Reisig можно найти много примеров от веб-сайта Douglas Crockfor.
Я сделал кое-что из этого недавно, и вот мой опыт.
Существует три основных подхода:
Я возился с веб-сборщиком для варианта 2, но я нахожу их синтаксис немного странным. Смесь XML и некоторого языка сценариев псевдо-Java. Если вам нравится Java и нравится извлечение данных в стиле XML (XPath, XQuery), это может быть билетом для вас.
Изменить: если вы используете регулярные выражения, убедитесь, что вы используете библиотеку с ленивыми квантификаторами и группами захвата! PHP ' В старых библиотеках регулярных выражений они отсутствуют, и они незаменимы для сопоставления данных между тегами открытия / закрытия в HTML.
Попробуйте поискать в Google очистку экрана + язык, который вы предпочитаете. Я знаю несколько вариантов Python, вы можете найти эквивалент для предпочитаемого вами языка:
В зависимости от веб-сайта, который нужно очистить, вам может потребоваться использовать один или несколько подходов, описанных выше.
Без фиксированной структуры HTML для анализа, Я бы не хотел поддерживать регулярные выражения для поиска данных. Возможно, вам больше повезет с анализом HTML с помощью подходящего парсера, который строит дерево. Затем выберите элементы ... которые были бы более удобными в обслуживании.
Очевидно, что лучший способ - это какой-нибудь XML-вывод из механизма с фиксированной разметкой, который вы можете проанализировать и проверить. Я бы подумал, что библиотека синтаксического анализа HTML с некоторыми «в темноте» зондирование созданного дерева было бы проще поддерживать, чем регулярные выражения.
Таким образом, вам просто нужно проверить ...
превращается в ...
или что-то в этом роде.
В итоге, поиск определенных элементов с помощью регулярного выражения был бы мрачным. Лучшим подходом является построение DOM-подобной модели страницы и поиск «привязок» к символьным данным в тегах.
Или отправить электронное письмо на сайт с указанием аргумента в пользу XML API. .. вас могут нанять!
В итоге, использование регулярного выражения для определенных элементов было бы мрачным. Лучшим подходом является построение модели страницы, подобной DOM, и поиск «привязок» к символьным данным в тегах.
Или отправка электронной почты на сайт с заявлением о необходимости использования XML API. .. вас могут нанять!
В итоге, использование регулярного выражения для определенных элементов было бы мрачным. Лучшим подходом является построение модели страницы, подобной DOM, и поиск «привязок» к символьным данным в тегах.
Или отправка электронной почты на сайт с заявлением о необходимости использования XML API. .. вас могут нанять!
Вы не говорите, на каком языке говорите. В мире Java вы можете использовать TagSoup и XPath, чтобы минимизировать неудобства. Вот пример из этого блога (конечно, XPath может быть намного сложнее, если того требуют ваши нужды):
URL url = new URL("http://example.com");
SAXBuilder builder = new SAXBuilder("org.ccil.cowan.tagsoup.Parser"); // build a JDOM tree from a SAX stream provided by tagsoup
Document doc = builder.build(url);
JDOMXPath titlePath = new JDOMXPath("/h:html/h:head/h:title");
titlePath.addNamespace("h","http://www.w3.org/1999/xhtml");
String title = ((Element)titlePath.selectSingleNode(doc)).getText();
System.out.println("Title is "+title);
Я бы рекомендовал экстернализировать выражения XPath, чтобы у вас была некоторая степень защиты, если сайт изменения.
Вот пример XPath, который я определенно не использую для сканирования этого сайта. Ни в коем случае, не я:
"//h:div[contains(@class,'question-summary')]/h:div[@class='summary']//h:h3"
Вы не упомянули, какой стек технологий вы используете. Если вы разбираете HTML, я бы использовал библиотеку синтаксического анализа:
Существуют также веб-службы, которые делают именно то, что вы поговорка - коммерческая и бесплатная. Они очищают сайты и предлагают интерфейсы веб-сервисов.
И общий веб-сервис, который предлагает некоторую очистку экрана, - это Yahoo Pipes. предыдущий вопрос о переполнении стека по этому
Это не надежно, но вы можете посмотреть парсер, такой как Beautiful Soup Он не сможет волшебным образом найти ту же информацию, если макет изменится, но это намного проще, чем писать сложные регулярные выражения. Обратите внимание, что это модуль Python.
К сожалению, «парсинг» - наиболее распространенное решение, как вы сказали, при попытке проанализировать HTML с веб-сайтов. Вы можете обнаружить структурные изменения на странице и пометить предупреждение, которое нужно исправить, чтобы изменение в их конце не приводило к ошибочным данным. Пока семантическая сеть не станет реальностью, это в значительной степени единственный способ гарантировать большой набор данных.
В качестве альтернативы вы можете придерживаться небольших наборов данных, предоставляемых API. Yahoo очень усердно работает над предоставлением данных с возможностью поиска через API (см. YDN), я думаю, что Amazon API открывает много книжных данных и т. Д. И т. Д.
Надеюсь, что это немного поможет!
РЕДАКТИРОВАТЬ: И если вы используете PHP, я бы рекомендовал SimpleHTMLDOM
Вы изучали возможность использования библиотеки обработки HTML? У Ruby есть несколько довольно хороших. например, hpricot
С хорошей библиотекой вы можете указать части страницы, которые вы хотите, используя селекторы CSS или xpath. Это было бы намного надежнее, чем использование регулярных выражений.
Пример из hpricot wiki:
doc = Hpricot(open("qwantz.html"))
(doc/'div img[@src^="http://www.qwantz.com/comics/"]')
#=> Elements[...]
Я уверен, что вы могли бы найти библиотеку, которая делает аналогичные вещи в .NET, Python и т. Д.
Если вы можете использовать что-то вроде Tag Soup , то это будет место для начала. Тогда вы могли бы рассматривать страницу как XML API, вроде как.
Она имеет реализацию на Java и C ++, может работать!
Parsley на http://www.parselets.com выглядит довольно привлекательно.
Он позволяет вам определять «парслеты» с помощью JSON, что вы определяете, что и ищите на странице, а затем он анализирует эти данные для вас.