WebProg-2012/Gyakorlat3

A MathWikiből
A lap korábbi változatát látod, amilyen Kkovacs (vitalap | szerkesztései) 2012. szeptember 20., 13:44-kor történt szerkesztése után volt.

Tartalomjegyzék

Bevezetés

  • Ami mindenképp kelleni fog a python file-od elejére:
from lxml import etree
  • Az lxml dokumentációját megtaláljátok ezen az oldalon.


  • Valószinüleg kelleni fog még, hogy a karakter kódolás jó legyen:
import sys
reload(sys)
sys.setdefaultencoding("iso-8859-2")


  • A webrõl html oldalt a következõ függvénnyel tölthetünk le egy string-be:
require urllib
def get_html(uri):
    u = urllib.urlopen(uri)
    return u.read()
  • Utána simán beírhatjuk:
html_str = get_html("http://www.google.com")


  • Hogy elkezdhessünk bányászni, a következõket kell megtennünk:
import StringIO

html = etree.parse(StringIO.StringIO(html_str),parser)


  • Ezek után használhatjuk az xpath függvényt, a következõ módon:
html.xpath("/html/body/p")
ahol a /html/body/p az útvonal a html-fában.
  • Az xpath függvény egy listát fog visszaadni, így vagy [0], [1] stb.-vel kérdezzétek le az elemeit, vagy egy for ciklussal menjetek végig rajta.
  • Ha már lekértétek valamelyik elemét, akkor a text adattagjában van a benne tárolt szöveg, pl:
h.xpath("/html/body/p")[1].text
ez lekéri a második html/body-n belüli p-nek a szövegét


  • Az xpath-ban a következõket használhatjátok még:
    • /html//p - a html-en belül bármilyen útvonalon elérhetõ p-k
    • /html/body/* - a közvetlenül /html/body alatti összes csúcs
    • /*/*/ul - a 2 hosszú úton elérhetõ ul-ek
    • //a[@href='http://math.bme.hu'] - bármilyen útvonalon elérhetõ 'a'-k amiknek a href attribútuma a 'http://math.bme.hu'
    • az elõzõt tagadhatjátok is, hogy olyanokat keressen ami nem rendelkezik valamilyen attribútummal: //hr[not(@noshade)]
  • Ha valamelyik csúcs attribútumának meg szeretnétek tudni az értéket, a következõképpen tudjátok ezt megtenni:
html.xpath("//hr")[0].get('size')
ez lekéri az elsõ hr-nek a size attribútumát


  • Ez a függvény még nagyon hasznos lehet:
def inner_html(xpath):

return etree.tostring(xpath, pretty_print=True, method="html", encoding='iso-8859-2')

Ez nem csak a megadott csúcsban található szöveget írja ki, hanem az egész részfát, pl:
inner_html(h.xpath('/html/body/p')[1])
Kiírná a teljes html kódot ami a /html/body-n belül a második 'p'-ben van.


Példákat ezekre találhattok Simon András eredeti elõadásanyagában itt


Feladatok

Teszt html-en

Töltsétek le a következõt html-t: html

A következõ feladatokat mind ezen a test.html-en végezzétek el, ezt parse-olni a következõ módon tudjátok:

parser = etree.HTMLParser()
html = etree.parse("./test.html", parser)
  1. Írjátok ki az elsõ 'p'-nek a tartalmát!
  2. Írjátok ki a második ul részfájának a teljes html-ét! (Ezt az inner_html függvénnyel tudjátok könnyen.)
  3. Írjátok ki az összes li tartalmát egy for ciklussal!
  4. Navigáljatok el ahhoz a hr-hez, aminek a size attribútuma 1! (Úgy tudjátok leellenõrizni, hogy jól megtaláltátok-e, ha az inner_html-el írjátok ki.)
  5. Írjátok ki annak az ul-nek a tartalmát, ami 3 lépésben elérhetõ (tehát õ 4 mélységben van).
  6. Írjátok ki annak a táblázatnak a summary attribútumát amelyiknek a border-e "1"!
  7. Gyûjtsétek ki bármelyik táblázatból azokat az adatokat amiknek a class-a "allat"!
  8. Mentsétek file-ba annak a táblázatnak a részhtml-jét amelyik elérési útvonalában legalább 2 div van!


Élesben a web-rõl

Személyes eszközök