Быстрый в изучении - мощный в программировании
Скрипт ИНВЕСТОР на Python

Попробуйте себя в качестве инвестора имея в помощники мощный алгоритм советника на Python...

Все уроки по PyQt5

PyQt5 реализован как комплект Python-модулей. Он включает в себя около 620 классов и 6000 функций и методов...

Скрипт отправки SMS через Python

Была задача отправить SMS-ки большому списку номеров телефона с уточнением цены за всю рассылку "До" ее отправки...

Парсер 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
"""

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

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. Обучитесь уникальным приемами игры и станьте постоянным победителем.

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru yandex.ru
Комментариев: 12
  1. в этом блоке у меня ошибка, ничего не менял просто скопировал код.

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

    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. find_all -> findAll

  3. Добрый день!

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

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

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

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

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

  5. Добренько!

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

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

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

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

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

    Добрый день!

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

    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. Александр, здравствуйте!

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

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

    python myfile.py

  10. Добрый день.

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

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

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

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

    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

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

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

Оставьте комментарий!

Используйте нормальные имена.

Имя и сайт используются только при регистрации

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

(обязательно)