Парсинг сайтов, модуль Beautiful Soup

09.03.2018

Теги: PythonWeb-разработкаМодульПарсинг

Beautiful Soup — модуль, предназначенный для извлечения информации из HTML-документа. Для установки модуля выполняем команду pip install beautifulsoup4 в командной строке и импортируем его с помощью инструкции import bs4.

>>> import requests, bs4
>>> res = requests.get('http://www.tinko.info/')
>>> soup = bs4.BeautifulSoup(res.text, "html.parser")
>>> type(soup)
<class 'bs4.BeautifulSoup'>

Для получения элемента HTML-документа можно использовать метод select() и передать ему строку CSS-селектора искомого элемента. Примеры наиболее часто используемых селекторов:

'div' Все элементы <div>
'#author' Элемент, атрибут id которого имеет значение author
'.notice' Все элементы, атрибут class которых имеет значение notice
'div span' Все элементы <span>, вложенные в элементы <div>
'div > span' Все элементы <span>, вложенные непосредственно в элементы <div>
'input[name]' Все элементы <input>, имеющие атрибут name, независимо от его значения
'input[type="button"]' Все элементы <input>, имеющие атрибут name со значением button

Получим элемент <title> HTML-документа:

>>> title = soup.select('head > title')
>>> type(title)
<class 'list'>
>>> len(title)
1
>>> title
[<title>Торговый Дом ТИНКО</title>]
>>> title[0].getText()
'Торговый Дом ТИНКО'

Скрипты, подключенные к странице:

>>> js = soup.select('head > script[type="text/javascript"]')
>>> js
[<script src="http://www.tinko.info/view/tinko/frontend/resource/js/jquery-2.1.1.min.js" type="text/javascript"></script>,
<script src="http://www.tinko.info/view/tinko/frontend/resource/js/jquery.cookie.js" type="text/javascript"></script>,...]
>>> js[0].attrs
{'type': 'text/javascript', 'src': 'http://www.tinko.info/view/tinko/frontend/resource/js/jquery-2.1.1.min.js'}
>>> js[0].attrs['type']  # получаем значение атрибута
'text/javascript'
>>> script = js[0]
>>> script.get('src') # получаем значение атрибута
'http://www.tinko.info/view/tinko/frontend/resource/js/jquery-2.1.1.min.js'
# Открывает несколько вкладок браузера с результатами
# поиска; поисковый запрос берёт из командной строки

import requests, sys, webbrowser, bs4

print('Поиск...')
# Получаем из командной строки поисковый запрос
param = {'q': ' '.join(sys.argv[1:])}
res = requests.get('http://google.com/search', params = param)
if res.status_code != requests.codes.ok:
    print('Ошибка при загрузке страницы Google')
    sys.exit()

soup = bs4.BeautifulSoup(res.text, "html.parser")

# Открываем вкладку браузера для каждого результата
links = soup.select('.r a')
numOpen = min(5, len(links))
for i in range(numOpen):
    webbrowser.open('http://google.com' + links[i].get('href'))

Дополнительно

Поиск: Python • Web-разработка • Модуль • Парсинг

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.