Быстрый в изучении - мощный в программировании
>> Telegram ЧАТ для Python Программистов

ImageСвободное общение и помощь советом и решением проблем с кодом! Заходите в наш TELEGRAM ЧАТ!

>> Python Форум Помощи!

ImageМы создали форум где отвечаем на все вопросы связанные с языком программирования Python. Ждем вас там!

>> Python Канал в Telegram

ImageОбучающие статьи, видео и новости из мира Python. Подпишитесь на наш TELEGRAM КАНАЛ!

Парсер HTML Python

В практике любого программиста наступает задача скопировать некий материал с сайта. Так как страниц достаточно много не стоит терять время на ручное копирование. Ведь, языки программирования нужны для того чтобы избавится от рутинной работы и автоматизировать разные задачи. В Python есть отличная библиотека для работы с HTML. С ней можно парсить не только сайты но и обычные html документы. Хорошим преимуществом данной библиотеки является персональный алгоритм структурирования HTML кода, что позволяет программисту сэкономить время работы.

Но, проблемы в работе с html документами могут все равно появляться. HTML не имеет строгую структуру кода и некоторые верстальщики дают волю фантазии и изобретают свою структуру кода. Могут возникнуть и проблемы с кодировкой, что создаст новые проблемы для структурирования кода и получения данных.

Мы не будем воровать контент с других сайтов чтобы продемонстрировать библиотеку в работе, примеры будем делать на нашем сайте. Администрация pythonworld, поблагодарит нас за это и пойдем дальше.

Установка библиотеки Beautiful Soup (Linux)

$ apt-get install python-bs4
$ apt-get install python-lxml
$ apt-get install python-html5lib

Библиотека Beautiful Soup предназначена для работы с Python 2, но так же умеет работать с кодом Python 3. После установки и python-html5lib, можно будет парсить и современные документы стандарта HTML5.

После установки нужных модулей, начинаем парсить сайт. В результате выполнения скрипта вы должны получить структурированный код сайта.

# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
from urllib2 import urlopen
 
html_doc = urlopen('http://python-3.ru').read()
soup = BeautifulSoup(html_doc)
 
print soup

Примеры работы скрипта

print soup.title # <title>Python 3 - Программирование на Python 3</title>
print soup.title.string # Python 3 - Программирование на Python 3
 
# Содержимое мета полей
for meta in soup.find_all('meta'):
    print(meta.get('content'))
 
# Результат скрипта
"""
None
MaxSite CMS
Python 3 - молодой, но быстро развивающийся язык программирования. Изучить Python 3 онлайн на нашем сайте. Скачать python 3
скачать python 3, программирование на python 3, python для symbian 3, python 3 учебник, django python 3
"""
Самый дешевый и быстрый ресурс — боты в Инстаграм — доступен уже сейчас на сайте doctorsmm. При покупке ботов Вы получаете не только моментальное пополнение счетчика, но и выгодные персональные предложения по приобретению материала. Тестируйте продвижение, увеличивайте массовку на странице — и все это просто за копейки!

Поиск по ссылкам

for link in soup.find_all('a'):
    print link.get('href')
 
# Содержимое ссылок
for link in soup.find_all('a'):
    print link.contents[0]

Парсер DIV блоков

# Содержимое из <div class="content"> ... </div>
print soup.find('div', 'content')
 
# Блок: <div id="top_menu"> ... </div>
print soup.find('div', id='top_menu')

Ссылки на изображения

for img in soup.find_all('img'):
    print img.get('src')
 
# Получаем
"""
http://python-3.ru/application/maxsite/templates/python/images/date.png
http://python-3.ru/application/maxsite/templates/python/images/user.png
http://python-3.ru/application/maxsite/templates/python/images/category.png
http://python-3.ru/application/maxsite/templates/python/images/tag.png
http://python-3.ru/uploads/for-in-python.png
...
"""

Данная библиотека очень легка и быстра в использовании и изучении. Остальные методы библиотеки можете изучить на официальном сайте. Если будут вопросы по работе данной библиотеки задавайте их в комментариях. Попробуем в месте решить вашу проблему.

Изучайте разные рабочие стратегии игры на preflop.info. Обучитесь уникальным приемами игры и станьте постоянным победителем.

Комментариев: 12
  1. Image

    в этом блоке у меня ошибка, ничего не менял просто скопировал код.

    # Содержимое мета полей

    for meta in soup.find_all('meta'):

    print(meta.get('content'))

    Traceback (most recent call last):

    File "C:/Users/nor/Desktop/les.py", line 7, in

    for meta in soup.find_all('meta'):

    TypeError: 'NoneType' object is not callable

  2. Image

    find_all -> findAll

  3. Image

    Добрый день!

    Скажите можно сделать Парсер HTML страниц сайта который сделан на joomla если да то можете показать пример кода как это сделать спасибо заранее.

  4. Image

    Добрый вечер !

    Извините я наверное не так выразился я хотел сказать.

    Можно ли с сделать копию категорий содержимого сайта на joomla импортировать это в xml формат.

    А потом восстановить на другом сайте

  5. Image

    Добренько!

    А если нужна картинка из блока?

  6. Image

    Timberg, существует функция urlretrieve.

  7. Image

    Здравствуйте! А как получить доступ к div-блокам элемента "всплывающего" окна? Самый простой пример того, что я имею в виду: Вконтакте если открыть "интересные страницы" пользователя, в адресной строке ссылка не поменяется, но мы получаем целую кучу новых данных на всплывшем окне. Если открыть конкретно "код элемента", там все есть. А как получить ссылку на эти данные?

    Прошу прощения, если коряво выражаюсь или спрашиваю глупые вещи, я только начинаю.

  8. Александр | 2016-01-23 в 19:54:13
    Image

    Добрый день!

    Я написал и запустил данный код из статьи:

    from bs4 import BeautifulSoup

    from urllib2 import urlopen

    html_doc = urlopen('http://python-3.ru').read()

    soup = BeautifulSoup(html_doc)

    print soup

    И получил вот это: Missing parentheses in call to 'print'.

    Что это означает, и как это исправить?

  9. Image

    Александр, здравствуйте!

    Проблема в том, что вы запускаете данный скрипт с помощью Python 3, для этого замените print soup на print(soup).

    Попробуйте запускать с помощью Python 2.7:

    python myfile.py

  10. Image

    Добрый день.

    Скажите можно ли скопировать стиль css на другом сайте.

    Используя эту библиотеку

  11. Image

    Здравствуйте Артем.

    Да, используете следующий код:

    from urllib.request import urlopen

    file_with_css = open('mycssfile.css', 'w')

    url = 'http://mywebsite/style.css'

    css_link = urlopen(url)

    file_with_css.write(style.decode('utf-8'))

    file_with_css.close()

  12. Аноним | 2016-05-31 в 08:36:48
    Image

    Здравствуйте,

    у меня есть форум, я бы хотел чтобы по циклу я прошел по каждой теме и взял оттуда дивки с классом