2011-03-16 11 views

Respuesta

5
import urllib2 
import BeautifulSoup 
import re 

Newlines = re.compile(r'[\r\n]\s+') 

def getPageText(url): 
    # given a url, get page content 
    data = urllib2.urlopen(url).read() 
    # parse as html structured document 
    bs = BeautifulSoup.BeautifulSoup(data, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES) 
    # kill javascript content 
    for s in bs.findAll('script'): 
     s.replaceWith('') 
    # find body and extract text 
    txt = bs.find('body').getText('\n') 
    # remove multiple linebreaks and whitespace 
    return Newlines.sub('\n', txt) 

def main(): 
    urls = [ 
     'http://www.stackoverflow.com/questions/5331266/python-easiest-way-to-scrape-text-from-list-of-urls-using-beautifulsoup', 
     'http://stackoverflow.com/questions/5330248/how-to-rewrite-a-recursive-function-to-use-a-loop-instead' 
    ] 
    txt = [getPageText(url) for url in urls] 

if __name__=="__main__": 
    main() 

Ahora elimina javascript y decodifica entidades html.

+0

¡Increíble! Muchas gracias, @Hugh Bothwell! – Georgina

1

Es perfectamente posible. La manera más fácil es recorrer la lista de URL, cargar el contenido, buscar las URL y agregarlas a la lista principal. Detener la iteración cuando se encuentran suficientes páginas.

sólo algunos consejos:

  • urllib2.urlopen para ir a buscar el contenido
  • BeautifulSoup: findAll ('A') para las direcciones URL para encontrar
+0

Hola @Jiri - Qué quiere decir "encontrar el código HTML"? – Georgina

+1

Ok, no es necesario recorrer el sitio por URL en las páginas. Solo para quitar el texto. Puedes probar '' .join (soup.findAll (text = True)) – Jiri

+0

Guau! Realmente lo aprecio ... – Georgina

1

Sé que no es una respuesta correcta (acerca de BeautifulSoup) pero una buena idea es echar un vistazo a Scrapy que parece ajustarse a sus necesidades.

Cuestiones relacionadas