Парсинг сайтов, модуль Beautiful Soup
09.03.2018
Теги: Python • Web-разработка • Модуль • Парсинг
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-разработка • Модуль • Парсинг