BeautifulSoup

Урок за Python BeautifulSoup за начинаещи

Урок за Python BeautifulSoup за начинаещи
Уеб изстъргването е от голямо значение в днешния свят. Всеки се нуждае от данни от различни източници, включително уеб страници. В тази статия ще разгледаме как да анализираме html с библиотеката beautifulsoup. Извличането на необходимите данни от куп азбуки и символи, благодарение на тази страхотна библиотека, стана много по-лесно. BeautifulSoup, написана на Python, може лесно да бъде инсталирана на вашата машина с помощта на инструмента за инсталиране на pip на Python. Следната команда ще помогне да се инсталира библиотеката:

pip инсталирайте BeautifulSoup4

За да проверите дали инсталацията е била успешна, активирайте интерактивната обвивка на Python и импортирайте BeautifulSoup. Ако не се появи грешка, това означава, че всичко е минало добре.  Ако не знаете как да го направите, въведете следните команди във вашия терминал.

$ python
Python 3.5.2 (по подразбиране, 14 септември 2017 г., 22:51:06)
[GCC 5.4.0 20160609] на linux
Напишете "помощ", "авторско право", "кредити" или "лиценз" за повече информация.
>>> импортиране на bs4

За да работите с библиотеката BeautifulSoup, трябва да преминете в html. Когато работите с реални уебсайтове, можете да получите html на уеб страница, използвайки библиотеката за заявки. Инсталирането и използването на библиотеката за заявки е извън обхвата на тази статия, но можете да се ориентирате в документацията, че е доста лесна за използване. За тази статия ние просто ще използваме html в python низ, който бихме извикали html.

html = "" "

Профил на служителя



Име:Д-р Питър Паркър

Работа:Инженер по машинно обучение

Телефон:+12345678910


Уебсайт:
pparkerworks.com



""

За да използваме beautifulsoup, ние го импортираме в кода, използвайки кода по-долу:

от bs4 внос BeautifulSoup

Това би въвело BeautifulSoup в нашето пространство от имена и ние можем да го използваме при анализирането на нашия низ.

супа = BeautifulSoup (html, "lxml")

Сега, супа е обект BeautifulSoup от тип bs4.BeautifulSoup и можем да изпълним всички операции BeautifulSoup на супапроменлива.

Нека да разгледаме някои неща, които можем да направим с BeautifulSoup сега.

ПРАВИ ГРОЗНОТО, КРАСИВО

Когато BeautifulSoup анализира html, обикновено не е в най-добрия формат. Разстоянието е доста ужасно. Етикетите са трудни за намиране. Ето изображение, което показва как биха изглеждали, когато се отпечатате супа:

Решение за това обаче има. Решението дава на html перфектното разстояние, което прави нещата да изглеждат добре. Това решение заслужено се нарича „разкрасявам„.

Разбира се, може да не можете да използвате тази функция през повечето време; обаче има моменти, когато може да нямате достъп до инструмента за проверка на елемент на уеб браузър. В онези времена на ограничени ресурси бихте намерили метода на разкрасяването много полезен.

Ето как го използвате:

супа.красив ()

Маркировката ще изглежда правилно разположена, точно както на изображението по-долу:

Когато приложите метода за разкрасяване на супата, резултатът вече не е тип bs4.BeautifulSoup. Резултатът вече е тип „unicode“. Това означава, че не можете да прилагате други методи BeautifulSoup върху него, но самата супа не е засегната, така че сме в безопасност.

НАМИРАНЕ НА ЛЮБИМИТЕ НИ МАРКИ

HTML се състои от тагове. Той съхранява всичките си данни в тях и сред цялата тази бъркотия се крият данните, от които се нуждаем. По принцип това означава, че когато намерим правилните тагове, можем да получим това, от което се нуждаем.

И така, как да намерим правилните тагове? Използваме методите за намиране и намиране на всички на BeautifulSoup.

Ето как работят:

The намирам метод търси първия таг с необходимото име и връща обект от тип bs4.елемент.Етикет.

The find_all метод, от друга страна, търси всички тагове с необходимото име на маркера и ги връща като списък от тип bs4.елемент.Резултат. Всички елементи в списъка са от тип bs4.елемент.Етикет, за да можем да извършим индексиране в списъка и да продължим нашето красиво проучване на супата.

Нека видим малко код. Нека намерим всички тагове div:

супа.намери („div“)

Ще получим следния резултат:

Име:Д-р Питър Паркър

Проверявайки променливата html, ще забележите, че това е първият div таг.

супа.find_all („div“)

Ще получим следния резултат:

[
Име:Д-р Питър Паркър
,
Работа:Инженер по машинно обучение
,
Телефон:+12345678910
,
,
Уебсайт:
pparkerworks.com
]

Той връща списък.  Ако например искате третия таг div, стартирате следния код:

супа.find_all („div“) [2]

Ще върне следното:

Телефон:+12345678910

НАМИРАНЕ НА АТРИБУТИТЕ НА НАШИТЕ ЛЮБИМИ ЕТИКЕТИ

Сега, когато видяхме как да получим любимите си тагове, какво ще кажете за получаването на техните атрибути?

Може би в този момент си мислите: „За какво ни трябват атрибути?„. Е, много пъти повечето от данните, от които се нуждаем, ще бъдат имейл адреси и уебсайтове. Този вид данни обикновено са хипервръзки в уеб страници, като връзките са в атрибута „href“.

Когато извлечем необходимия таг, използвайки методите find или find_all, можем да получим атрибути чрез прилагане attrs. Това ще върне речник на атрибута и неговата стойност.

За да получим например атрибута на имейл, получаваме тагове, които заобикалят необходимата информация и направете следното.

супа.find_all („a“) [0].attrs

Което би върнало следния резултат:

'href': 'mailto: [имейл защитен]'

Същото нещо за атрибута на уебсайта.

супа.find_all („a“) [1].attrs

Което би върнало следния резултат:

'href': '
http: // pparkerworks.com'

Върнатите стойности са речници и може да се приложи нормален синтаксис на речника, за да се получат ключовете и стойностите.

ДА ВИДИМ РОДИТЕЛЯ И ДЕЦАТА

Навсякъде има етикети. Понякога искаме да знаем какви са детските тагове и какъв е родителският.

Ако още не знаете какво е родителски и дъщерен маркер, това кратко обяснение трябва да е достатъчно: родителският таг е непосредственият външен таг, а дъщерният е непосредственият вътрешен таг на въпросния маркер.

Разглеждайки нашия html, основният таг е родителският маркер на всички тагове div. Също така, удебеленият етикет и котвата са дъщери на div таговете, където е приложимо, тъй като не всички div тагове притежават закотвени тагове.

Така че можем да получим достъп до родителския маркер, като извикаме findParent метод.

супа.намиране ("div").findParent ()

Това би върнало целия таг на тялото:


Име:Д-р Питър Паркър

Работа:Инженер по машинно обучение

Телефон:+12345678910


Уебсайт:
pparkerworks.com

За да получим детския таг на четвъртия div таг, ние извикваме findChildren метод:

супа.find_all ("div") [4].findChildren ()

Той връща следното:

[Уебсайт:, pparkerworks.com]

КАКВО ИМА ЗА НАС?

Когато разглеждаме уеб страници, не виждаме маркери навсякъде на екрана. Всичко, което виждаме, е съдържанието на различните тагове. Ами ако искаме съдържанието на етикет, без всички ъглови скоби да правят живота неудобен? Това не е трудно, всичко, което бихме направили, е да се обадим get_text метод на избрания маркер и ние получаваме текста в маркера и ако в маркера има други тагове, той също получава техните текстови стойности.

Ето пример:

супа.намери ("тяло").get_text ()

Това връща всички текстови стойности в маркера на тялото:

Име: Д-р Питър Паркър
Работа: инженер по машинно обучение
Телефон: +12345678910
Имейл: [имейл защитен]
Уебсайт: pparkerworks.com

ЗАКЛЮЧЕНИЕ

Това имаме за тази статия. Все пак има и други интересни неща, които могат да се направят с красива супа. Можете да проверите документацията или да използвате реж. (BeautfulSoup) върху интерактивната обвивка, за да видите списъка с операции, които могат да бъдат извършени върху обект BeautifulSoup. Това е всичко от мен днес, докато не пиша отново.

Топ 10 игри за игра на Ubuntu
Платформата на Windows е една от доминиращите платформи за игри поради огромния процент игри, които се развиват днес, за да поддържат Windows. Може ли...
5 най-добри аркадни игри за Linux
В днешно време компютрите са сериозни машини, използвани за игри. Ако не можете да получите новия висок резултат, ще разберете какво имам предвид. В т...
Битка за Уеснот 1.13.6 Разработка освободена
Битка за Уеснот 1.13.6, издаден миналия месец, е шестата версия за разработка в 1.13.x серия и предоставя редица подобрения, най-вече на потребителски...