Stažení a zpracování HTML stránky
Princip stažení je stejný jako v StazeniWeboveStranky. Například tedy takto:
import urllib
fp = urllib.urlopen('http://www.py.cz/PythonZaciname')
data = fp.read()
fp.close()
Webovou stránku ale stahujeme abychom z ní něco vydolovali. Například: "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."
Odborně se tomu říká ''parsování'.
HTMLParser
Vestavěný modul HTMLParser je na to určen. Více se dozvíte v dokumentaci, uvedu zde jen malý praktický příklad. Vypíše všechny tagy 'a':
import urllib, HTMLParser
class MyHTMLParser(HTMLParser.HTMLParser):
"Obalka kolem tridy HTMLParser"
def __init__(self):
"""Inicializace a reset teto instance."""
self.reset()
self.all=[]
def handle_starttag(self, tag, attrs):
"Osetri startovaci tag"
if tag=='a':
self.all.append(attrs[0])
if __name__=='__main__':
# stazeni z Netu
fp = urllib.urlopen('http://www.py.cz/StazeniSouboru')
vstup = fp.read()
fp.close()
myJob=MyHTMLParser()
myJob.feed(vstup)
myJob.close()
print myJob.all
BeautifulSoup
Tento modul, který je třeba stáhnout umožňuje mnohem intuitivnější a přímočarejší práci s rozkouskováním HTML kodu. A mnohem více. Podobný kód, jako je uveden výše. Vypípše všechny odkazy ze stránky (které můžete následně stáhnout nebo otevírat :-)):
import urllib, BeautifulSoup
fp = urllib.urlopen('http://www.py.cz/StazeniSouboru')
data = fp.read()
fp.close()
soup=BeautifulSoup.BeautifulSoup(data)
print soup('a')
Více na BeautifulSoup.
Existuje mnoho dalších
nebo specializovanějších modulů. Najdete je snad na wiki.python.org. Můžete sem pak přidat své zkušenosti.