Як витягнути терміни з документа HTML


2

У мене документ HTML заповнений умовами, які мені потрібно ввести в електронну таблицю.

Вони дотримуються цієї основної схеми:

<ul>
     <li class="name"><a href="spot.html">Spot</a></li>
     <li class="type">Dog</li>
     <li class="color">Red</li>
</ul>
<ul>
     <li class="name"><a href="mittens.html">Mittens</a></li>
     <li class="type">Cat</li>
     <li class="color">Brown</li>
</ul>
<ul>
     <li class="name"><a href="squakers.html">Squakers</a></li>
     <li class="type">Little Parrot</li>
     <li class="color">Rainbow</li>
</ul>

Це дуже послідовно.

Мені потрібно витягнути рядок із li.name a(так, "Spot"), але тільки якщо typeце "Dog" або "Папуга", і помістити їх у електронну таблицю.

Я намагався використовувати здатність Sublime Text знаходити за допомогою regex, але я дуже боюся, і оскільки регулярно вираження та HTML зазвичай не грають добре , мені було цікаво, чи є кращий і простіший спосіб досягти цього. Дякую.

Відповіді:


4

Ось реалізація JavaScript, яка фактично використовує DOM, перевіряє typeклас і записує nameклас, якщо typeклас містить відповідне слово. Якщо потрібно більше types, просто додайте їх до searchforзмінної разом із трубкою ( |), що розділяє їх.

var searchfor = /Dog|Parrot/gi;

var win = window.open();

var lists = document.body.getElementsByTagName("ul");

for (i in lists) {
    var points = lists[i].getElementsByTagName("li");

    for (j in points) {
        if ((" " + points[j].className + " ").indexOf(" " + "type" + " ") > -1) {
            if (points[j].innerHTML.match(searchfor) != null) {
                for (k in points) {
                    if ((" " + points[k].className + " ").indexOf(" " + "name" + " ") > -1) {
                        win.document.writeln(points[k].innerHTML + "<br />");

                        break;
                    }
                }
            }
        }
    }
}

Тестовано на jsFiddle: http://jsfiddle.net/wdR5Y/

Найпростіший спосіб використовувати це - перетворити його в закладку таким чином: http://userjs.up.seesaa.net/js/bookmarklet.html

Як JavaScript, він не залежно від ОС і підтримується більшістю популярних веб-браузерів.

Імпорт у електронну таблицю залежить від вашої програми електронних таблиць, але часто достатньо скопіювати та вставити (відкриється нове вікно з виходом).


Якби це ідентифікатор, а не клас, це було б справедливо трохи простіше ... ну добре. Кредит на відповідь переповненням стека для отримання елемента по імені класу.


Спасибі, Бобе! Я не можу заставити закладку працювати, але ця ідея все-таки діє!
книгарня

@bookcasey Це працює для мене ™ з Firefox, Chrome або Opera з вашим зразком HTML. Просто додайте закладку як закладку та використовуйте її на сторінці, яку ви хочете проаналізувати. Якщо ваш зразок HTML не відповідає справжньому, то я нічого не можу гарантувати (можливо, ви можете їх самим змінити?).
Боб

7

Не використовуйте Regex для розбору XML або HTML, використовуйте XML або HTML-аналізатор.

Іншим підходом є перетворення XML або HTML в текст, а потім використання grep

Див. Додаток для вилучення тегів XML з документа
Див. Чи існує в RedHat нативний інструмент для розбору файлів XML?
Див. Сценарій: що найпростіше витягнути значення з тегу XML-файлу?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.