Разбор vCards на веб-страницах в БД MySQL
У меня есть клиент, который использует отдельную vCard на отдельной странице. Они вставляются в текстовое поле WordPress. (Не самый эффективный способ ведения списка людей, но я не буду редактировать после этого факта.) Моя задача - написать что-то, чтобы проанализировать все адреса в vCards и выгрузить информацию в центральную базу данных. Это позволило бы всем разрозненным страницам стать адресами, переполненными координатами широты и долготы от Google, и отображать прекрасную главную страницу с большим количеством выводов.
На этой странице будут показаны все открытки с остальных страниц сайта.
О, это пример обеззараженного vcard на сайте, в действительности он будет окружен большим количеством сомнительного HTML-кода:
<div class="vcard">
<span class="fn org">XYZ Org Name</span><br />
<span class="url">http://www.someurl.com/</span>
<div class="adr"><span class="street-address">1234 Main Ave</span><br />
<span class="locality">Chicago</span><br />
<span class="region">IL</span><br /><span class="postal-code">60647</span></div>
</div>
Теперь, каждая страница имеет один из них, и разбираться со всем сайтом и собирать их в массив - это немного из моей лиги. Я могу справиться со сбросом их в базу данных, используя PHP и mySQL.
Любой совет будет приветствоваться!
РЕДАКТИРОВАТЬ: Не уверен, насколько это важно, но я получаю данные с другого сервера.
2 ответа
Попробуйте метод loadHTML класса DOMDocument. Затем вы можете использовать методы DOMDocument для выбора нужных вам узлов, атрибутов и значений. Или, если вы знакомы с XPath, вы также можете создать экземпляр объекта DOMXPath для запроса к загруженному DOMDocument, чтобы выбрать нужные данные.
Я считаю, что вы ищете парсеры HTML. Вот модуль разбора HTML для python
Вам нужно проанализировать соответствующие данные из всех файлов HTML, а затем делать с ними что угодно.
Я не пробовал ни одного php html парсера, чтобы рекомендовать какой-либо, но так как вы работаете над веб-сервером, я надеюсь, что он имеет perl? Взгляните на Perl HTML парсеры.
# этот фрагмент получит содержимое названия организации
sub start {
my ($self, $tag, $attr, $attrseq, $origtext) = @_;
if ($tag =~ /^span$/i && $attr->{'class'} =~ /^fn org$/i) {
# see if we find <span class="fn org"
push (@org_names, $origtext);
}
}
теперь у вас есть @org_names
массив, который содержит все названия организаций.