В свое время (около 1993 года) я написал паука для извлечения целевого контента из множества сайтов, которые использовали набор «правил», определенных для каждого сайта.
Правила были выражены в виде регулярных выражений и классифицировались как правила «подготовки» (те, которые массируют извлеченные страницы для лучшей идентификации / изоляции извлекаемых данных), так и правила «извлечения» (те, которые вызывали извлечение полезных данных.)
Так, например, с учетом страницы:
<html>
<head><title>A Page</title></head>
<body>
<!-- Other stuff here -->
<div class="main">
<ul>
<li>Datum 1</li>
<li>Datum 2</li>
</ul>
</div>
<!-- Other stuff here -->
<div>
<ul>
<li>Extraneous 1</li>
<li>Extraneous 2</li>
</ul>
</div>
<!-- Other stuff here -->
</body>
</html>
Правила извлечения только значений 'Datum' могут быть следующими:
- вырезать начальную часть, используя
'^.*?<div class="main">'
- полосная задняя часть с использованием
'</div>.+</html>$'
- извлечение в результат с использованием
'<li>([^<]+)</li>'
Это работало хорошо для большинства сайтов, пока они не изменили свой макет,в этот момент правила для этого сайта потребовали корректировки.
Сегодня я, вероятно, сделал бы то же самое, используя HTMLTidy Дэйва Раггетта для нормализации всех найденных страниц в допустимые XHTML и XPATH / XSLT дляпомассируйте страницу в правильном формате.