Beautiful Soup
Potřebujete něco vydolovat z HTML stránky a vůbec nemáte chuť se zabývat tím, jak HTML vypadá? Beautiful Soup rozkouskuje HTML stránku a vytvoří strom, který se dá procházet. Můžete pak požádat "Najdi všechny odkazy" nebo "Najdi všechny odkazy třídy vnejsiOdkazy nebo "Najdi všechny odkazy jejichž url je "neco.cz" nebo "Najdi tabulku, která má tučně hlavičku, a ten text mi dej." Tak jste tu správně. Beautiful Soup je Pythonský HTML/XML parser navržený pro snadné použití v projektech, které se zabývají dolováním dat z HTML stránek. Má dvě nadobyčejné přednosti:
Hodnotná data umístněná na velmi špatně udělaném webu máte k dispozici během chvilky. Projekty, které by jinak trvaly hodiny, jsou záležitostí několika minut s BeautifulSoup. |
Stažení Beautiful Soup
Poslední verze je Beautiful Soup. Můžete si ho stáhnout v jediném souboru nebo jako tarball s instalačním scriptem a unit testy. Beautiful Soup je licencovaný stejným způsobem jako sám Python, takže ho můžete vložit téměř do kterékoliv pythonovské aplikace nebo jako knihovnu a ihned začít používat. Tato verze funguje s Pythonem 2.2+.
Bonus: Pokud vyrábíte RSS feedy z webových stránek použití Beautiful Soup plus Scrape 'N' Feed je téměř ideální.
Jak používat Beautiful Soup?
Tady je pythonovská session, která ukazuje základní přednosti Beautiful Soup.
>>> from BeautifulSoup import BeautifulSoup >>> import re >>> >>> #Vytvoříme soup ... input = '''<html> ... <head><title>Titulek stranky</title></head> ... <body> ... <p id="firstpara" align="center">Toto je odstavec <b>jedna</b>. ... <p id="secondpara" align="blah">Toto je odstavec <b>dva</b>. ... </html>''' >>> soup = BeautifulSoup(input) >>> >>> #Search the soup ... titleTag = soup.html.head.title >>> print titleTag <title>Titulek stranky</title> >>> >>> print titleTag.string Titulek stranky >>> >>> print len(soup('p')) 2 >>> >>> print soup('p', {'align' : 'center'}) [<p id="firstpara" align="center">This is paragraph <b>one</b>. </p>] >>> >>> print soup('p', {'align' : 'center'})[0]['id'] firstpara >>> >>> print soup.first('p', {'align' : re.compile('^b.*')})['id'] secondpara >>> >>> print soup.first('p').b.string jedna >>> >>> print soup('p')[1].b.string dva >>> >>> #Modify the soup ... titleTag['id']='theTitle' >>> titleTag.contents = ['Jiny titulek.'] >>> print soup.html.head.title <title id="theTitle">Jiný titulek.</title>
- to platí na BeautifulSoup, ne na editaci této stránky ;-)