Извлечение текста: использовал все методы, но застрял

Я хочу извлечь несколько текстов с веб-страницы. Я искал StackOverFlow (а также другие сайты), чтобы найти правильный метод. Я использовал HTML2TEXT, BEAUTIFULSOUP, NLTK и некоторые другие ручные методы для извлечения, и у меня не получилось, например:

  • HTML2TEXT работает в автономном режиме (= сохраненные страницы), и мне нужно сделать это онлайн.
  • BS4 не будет работать должным образом с Unicode (моя страница в персидской кодировке UTF8) и не будет извлекать текст. Он также возвращает HTML-теги\коды. Мне нужен только визуализированный текст.
  • NLTK не будет работать с моим персидским текстом. Даже при попытке открыть мою страницу с помощью urllib.request.urlopen я сталкиваюсь с некоторыми ошибками. Итак, как вы видите, я так сильно застрял, попробовав несколько методов.

Вот мой целевой URL: http://vynylyn.yolasite.com/page2.php Я хочу извлекать только персидские абзацы без тегов\кодов.

(Примечание: я использую Eclipse Kepler с Python 34, также я хочу извлечь текст, а затем выполнить тегирование POS, токенизацию Word\Sentence и т. д.)

Каковы мои варианты, чтобы заставить это работать?


person Vynylyn    schedule 16.01.2015    source источник
comment
Если у вас есть библиотека, работающая только в автономном режиме, это потому, что у нее нет собственных сетевых возможностей. Однако это нормально, потому что HTML и HTTP — совершенно разные технологии. Используйте сетевую библиотеку (например, ту, что включает Python), чтобы загрузить свою страницу из Интернета, а затем используйте библиотеку HTML для обработать это.   -  person Rob Kennedy    schedule 16.01.2015


Ответы (1)


Сначала я бы выбрал ваш второй вариант. BeautifulSoup 4 должен (и поддерживает) определенно поддерживать юникод (обратите внимание, что это UTF -8, глобальная кодировка символов, так что ничего персидского в ней нет).

И да, вы получите теги, так как это HTML-страница. Попробуйте выполнить поиск по уникальному идентификатору или посмотрите на структуру HTML на страницах. В вашем примере найдите элемент main, а затем элементы контента под ним или, возможно, используйте div#I1_sys_txt на этой конкретной странице. Когда у вас есть элемент, вам просто нужно вызвать get_text().

Попробуйте это (теперь в Python 3):

#!/usr/bin/env python3
import requests
from bs4 import BeautifulSoup

content = requests.get('http://vynylyn.yolasite.com/page2.php')
soup = BeautifulSoup(content.text)

tag = soup.find('div', id='I1_sys_txt')
print(tag.get_text() if tag else "<none found>")
person declension    schedule 16.01.2015
comment
Спасибо, Ник. Это действительно решило дело. Он вернул весь персидский текст без какого-либо проклятого тега, просто чистый текст. Я не могу проголосовать за него сейчас, так как мне нужно иметь 15 репутаций, поэтому я просто отметил его как принятый. - person Vynylyn; 17.01.2015
comment
Требуется некоторая модификация для работы с Py34: if tag: print (tag.get_text()) else: print ("Ничего не найдено") Ваш ответ был "Хорошо". Я просто переписываю эту часть для людей, которые могут вернуться к этому вопросу позже. Спасибо за помощь! - person Vynylyn; 17.01.2015
comment
Рад, что это сработало (да, это был синтаксис python2)! Так что да, вы также можете просто использовать print(tag.get_text() if tag else "<none found>") для Python 3.x - person declension; 18.01.2015