Я пытаюсь извлечь текст с произвольных html-страниц. Некоторые из страниц (которые я не контролирую) имеют неверные html или скрипты, которые затрудняют это. Также я нахожусь в среде совместного размещения, поэтому я могу установить любую библиотеку python, но я не могу просто установить что-либо, что хочу на сервере.Стратегия Python для извлечения текста из неправильных страниц html
pyparsing и html2text.py также, похоже, не работают с неверными страницами html.
Пример URL является http://apnews.myway.com/article/20091015/D9BB7CGG1.html
Моя текущая реализация примерно следующее:
# Try using BeautifulSoup 3.0.7a
soup = BeautifulSoup.BeautifulSoup(s)
comments = soup.findAll(text=lambda text:isinstance(text,Comment))
[comment.extract() for comment in comments]
c=soup.findAll('script')
for i in c:
i.extract()
body = bsoup.body(text=True)
text = ''.join(body)
# if BeautifulSoup can't handle it,
# alter html by trying to find 1st instance of "<body" and replace everything prior to that, with "<html><head></head>"
# try beautifulsoup again with new html
если BeautifulSoup все еще не работает, то я прибегаю к использованию эвристики смотреть на 1-ом полукокса, последнего символа (чтобы увидеть, если они выглядят как строка кода # < и берут образец строки, а затем проверяют, являются ли токены английскими словами или числами. Если для нескольких токенов есть слова или цифры, я полагаю, что строка - код.
Я мог бы использовать машинное обучение для проверки каждой линии, но это кажется немного дорогим, и мне, вероятно, придется его обучать (так как я не очень разбираюсь в неконтролируемых обучающих машинах) и, конечно же, напишу его.
Любые советы, инструменты, стратегии были бы наиболее желанными. Кроме того, я понимаю, что последняя часть этого довольно беспорядочна, поскольку, если я получаю строку, которая определяет, содержать код, я в настоящее время выбрасываю всю строку, даже если в строке есть небольшой текст на английском языке.
Ну, решение не стойкое, новость, с которой вы связались, была отличной. Некоторые люди, да? :) –
@ Lesse, я думаю, есть и неверные люди. – Johnny4000