TLDR - для opencard пример парсера
https://parsemx.com
Я никогда не задавался поиском на подобную тему, так как считаю это занятием, не особо того стоящим.
В вашем случае, вы желаете разобрать входящий слабоструктурированный/структурированный текст в набор определенных сущностей.
Перво-наперво, вам нужно выявить, что за основной формат входного текста (html, xml, json, текст просто).
Дальше, в зависимости от формата, вы выбираете стратегию. К примеру, если это html, то его можно почистить (tidy) и попробовать привести к XML. Зачастую это срабатывает нормально. Если нет - нужно разбирать конкретные случаи.
После того, как вы получили XML, вам нужно выделить минимальрный повторяющийся элемент, описывающий продукт. И просто пройтись по нему через XPath.