Pasando por HTML DOM en Python

Estoy buscando escribir una secuencia de comandos de Python (usando 3.4.3) que toma una página HTML de una URL y puede ir a través del DOM para tratar de encontrar un elemento específico.

Actualmente tengo esto:

#!/usr/bin/env python import urllib.request def getSite(url): return urllib.request.urlopen(url) if __name__ == '__main__': content = getSite('http://www.google.com').read() print(content) 

Cuando imprimo contenido, imprime toda la página html, que es algo parecido a lo que quiero … aunque lo ideal sería poder navegar a través del DOM en lugar de tratarlo como una cadena gigante.

Todavía soy bastante nuevo en Python, pero tengo experiencia con muchos otros lenguajes (principalmente Java, C #, C ++, C, PHP, JS). He hecho algo similar con Java antes, pero quería probarlo en Python.

Cualquier ayuda es apreciada. ¡Aclamaciones!

Hay muchos módulos diferentes que podrías usar. Por ejemplo, lxml o BeautifulSoup .

Aquí hay un ejemplo de lxml :

 import lxml.html mysite = urllib.request.urlopen('http://www.google.com').read() lxml_mysite = lxml.html.fromstring(mysite) description = lxml_mysite.xpath("//meta[@name='description']")[0] # meta tag description text = description.get('content') # content attribute of the tag >>> print(text) "Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for." 

Y un ejemplo de BeautifulSoup :

 from bs4 import BeautifulSoup mysite = urllib.request.urlopen('http://www.google.com').read() soup_mysite = BeautifulSoup(mysite) description = soup_mysite.find("meta", {"name": "description"}) # meta tag description text = description['content'] # text of content attribute >>> print(text) u"Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for." 

Observe cómo BeautifulSoup devuelve una cadena Unicode, mientras que lxml no lo hace. Esto puede ser útil / perjudicial dependiendo de lo que se necesita.

Echa un vistazo al módulo BeautifulSoup .

 from bs4 import BeautifulSoup import urllib soup = BeautifulSoup(urllib.urlopen("http://google.com").read()) for link in soup.find_all('a'): print(link.get('href'))