Парсер HTML страниц на Python
Разработка интернет-приложений » Python для начинающих » Общие вопросы parser html, python html parser, python парсер, парсер html
В практике любого программиста наступает задача скопировать некий материал с сайта. Так как страниц достаточно много не стоит терять время на ручное копирование. Ведь, языки программирования нужны для того чтобы избавится от рутинной работы и автоматизировать разные задачи. В 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. Обучитесь уникальным приемами игры и станьте постоянным победителем.
в этом блоке у меня ошибка, ничего не менял просто скопировал код.
# Содержимое мета полей
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
find_all -> findAll
Добрый день!
Скажите можно сделать Парсер HTML страниц сайта который сделан на joomla если да то можете показать пример кода как это сделать спасибо заранее.
Добрый вечер !
Извините я наверное не так выразился я хотел сказать.
Можно ли с сделать копию категорий содержимого сайта на joomla импортировать это в xml формат.
А потом восстановить на другом сайте
Добренько!
А если нужна картинка из блока?
Timberg, существует функция urlretrieve.
Здравствуйте! А как получить доступ к div-блокам элемента "всплывающего" окна? Самый простой пример того, что я имею в виду: Вконтакте если открыть "интересные страницы" пользователя, в адресной строке ссылка не поменяется, но мы получаем целую кучу новых данных на всплывшем окне. Если открыть конкретно "код элемента", там все есть. А как получить ссылку на эти данные?
Прошу прощения, если коряво выражаюсь или спрашиваю глупые вещи, я только начинаю.
Добрый день!
Я написал и запустил данный код из статьи:
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'.
Что это означает, и как это исправить?
Александр, здравствуйте!
Проблема в том, что вы запускаете данный скрипт с помощью Python 3, для этого замените print soup на print(soup).
Попробуйте запускать с помощью Python 2.7:
python myfile.py
Добрый день.
Скажите можно ли скопировать стиль css на другом сайте.
Используя эту библиотеку
Здравствуйте Артем.
Да, используете следующий код:
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()
Здравствуйте,
у меня есть форум, я бы хотел чтобы по циклу я прошел по каждой теме и взял оттуда дивки с классом