Большинство веб-страниц сейчас перегружено всевозможной рекламой… Наша задача «вытащить» из веб-страницы только полезную информацию, отбросив весь «мусор» (навигацию, рекламу и тд).
Основная полезная информация будет храниться в определенных тэгах. Имея урл, мы достаем контент страницы и просто ищем содержимое этих тэгов. Для разных сайтов набор таких тэгов разный (но схожий), поэтому для гибкой настройки в файле config.py описаны возможные настройки. Для парсинга используется стандартный питоновский HTMLParser, вспомогательные инструменты BeautifulSoup4 и python-requests. Возможно исполнение кода только с помощью python3.
Для использования в дирректории проекта в консоли вводим python -m htmlparser page_url
Пример: python -m htmlparser http://lenta.ru/news/2016/02/05/sexual_kolne/
LINE_MAX_LENGTH - максимальная длина строки
ALLOWED_TEXT_TAGS - тэги, из которых будем брать текст.
Пример: Брать текст из h1 и p
ALLOWED_TEXT_TAGS = ['h1', 'p']
IGNORE_ATTRS - в тэгах с такими атрибутами мы искать не будем, формат [('название атрибута', 'значение атрибута'), ...].
Пример: не брать текст из любых дочерних элементов тэга с id="menu" и тэга с id="navPath"
IGNORE_ATTRS = [('id', 'menu'), ('id', 'navPath')]
IGNORE_TAGS - в таких тэгах искать не надо.
Пример: не брать текст из любых дочерних элементов тэгов aside и header
IGNORE_TAGS = ['aside', 'header']
TAG_BEGIN_SYMBOLS - словарь для выделения нужных тэгов от начала строки.
Пример: выделять заголовок h1 как ##
TAG_BEGIN_SYMBOLS = {'h1': '## '}
TAG_END_SYMBOLS - словарь для выделения нужных тэгов с конца строки.
Пример: выделять заголовок h1 как ##
TAG_END_SYMBOLS = {'h1': ' ##'}
POSTFIX_ATTR - Если нужно достать информацию об атрибутах, то можно прописать здесь, будет прописываться в квадратных
скобках после элемента.
В данной задаче используется для ссылок.
В файле config.py закомментированы настройки для нескольких новостных сайтов.
- http://lenta.ru/news/2016/02/05/sexual_kolne/
- http://www.gazeta.ru/politics/2016/02/06_a_8060903.shtml
- http://aidom.ru/hots/2016/start-prodazh-eksklyuzivnih-uchastkov-na-beregu-suhodolskogo-ozera.52.html
- http://www.aif.ru/politics/russia/glava_sevastopolya_ideya_o_dekommunizacii_kryma_-_politicheskaya_shizofreniya
Результаты тестов также содержатся в репозитории.
- Разделение тэгов
<ol></ol>
и<ul></ul>
, возможность нумерации пунктов. - Загрузка "важных" картинок со страницы в директорию файла.
- Написание тестов.
- Поддержка python 2.7