Задать вопрос

С помощью чего можно вытащить из сотни html документов содержимое определенных тегов и поместить в один текстовый документ?

Доброго, Хабражители.
Прошу совета у знающих людей.
У меня следующая проблема.
Есть сотенка однотипных html документов.
Мне надо вытащить из них все содержимое тега
Говоря языком XPAth html/body/text()
и поместить в один текстовый файлик.
Затем в этом файлике сделать десяток автозамен, чтобы
привести форматирование к нужному виду.
к примеру s/<вr>/<вr>\n/

Советуют разное. Изучать Perl или php.
Учить shell.
Подскажите какими средствами подобное делать лучше всего.
Просто не хочется забивать гвозди микроскопом.
  • Вопрос задан
  • 3708 просмотров
Подписаться 5 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 13
m08pvv
@m08pvv
Зависит от сложности страничек — может можно и простым grep'ом обойтись.
Ответ написан
Комментировать
@ComodoHacker
Примерчик бы.
Я в таких случаях использую awk или sed.
Ответ написан
sgzmd
@sgzmd
Регэкспы, XML… не ибите мозги. BeautifulSoup решает это проблему на ура. Парсит любой, даже самый битый HTML.
Ответ написан
Комментировать
С помощью HTML-парсеров на java.

Вот, к примеру, пара из них:

HTMLParser
Jericho HTML Parser
Ответ написан
Velitsky
@Velitsky
Если без парсеров и страницы не очень сложные, то можно это реализовать на каком-нибудь языке, поддерживающим регулярные выражения. Это Perl, Python, PHP и прочие… Я лично люблю Perl… Правда пользуюсь больше PHP)))
Ответ написан
@ComputerPers
Мне кажется DOM дерево самое то. Проще всего его на джаве реализовать.
Ответ написан
Комментировать
seriyPS
@seriyPS
хм… lxml.de/lxmlhtml.html

from lxml import html
import os

with open("../results.txt", "w") as f:
    for fname in os.listdir('./'):
        tree=html.parse(fname)
        body_content=tree.xpath("//body")[0] 
        all_body_text=body_content.text_content() #только текст из всех descendant-or-self
        body_content_with_markup=body_content.tostring(body_content) #текст и разметка descendant-or-self
        result=some_processing("какой-либо из предыдущих результатов") # какие-то доп. замены и манипуляции
        f.write(result) # запихиваем все в один файл

Но если более конкретно скажете что нужно извлечь и какие трансформации нужно проделать — напишу более подробно. Может и на XSLT будет проще, если автозамены касаются в основном тегов.

Если на баше — то есть xmllint, который позволяет в том числе и xpath запросы выполнять
xmllint --html --xpath //body

Регулярки ни в коем случае не используйте ибо stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454
Ответ написан
Комментировать
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
Sed поучите или perl. По крайней мере не приобретете бесполезных знаний, которые будут не нужны после решения конкретно этой задачи.
Ответ написан
Setti
@Setti
querypath
Ответ написан
Комментировать
@Neir0
Зачем для такой задачи чего-то учить. Закажите на фрилансе, там вам накатают прогу за 10 баксов.
Ответ написан
Комментировать
@Crush
Мне кажется, что базовым знанием для работы с массивами текста являются регулярные выражения (см. книги Дж.Фридла). А дальше идут инструменты, которые позволяют более или менее удобно работать с рекэкспами. Под Win мой герой — это мегакомбайн PowerGrep!

А если учить ничего не хочется, можно объединить все файлы в один «copy *.html alltext.txt» и далее мучить его в текстовых редакторах и сортировать в Excel.
Ответ написан
Комментировать
Bardus
@Bardus
python s
scrapy.org

Там даже есть возможность посмотреть, как работают демон, через веб морду :)
Ответ написан
Комментировать
@vimvim
Ваша задача называется веб харвестинг.
Есть специальное, очень хорошее средство для этого: web-harvest.sourceforge.net/
На сайте есть примеры для решения типовых ( похожих на Вашу ) задач.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы