2010-12-16 15 views
19

Necesito analizar una url para obtener una lista de URL que enlazan a una página de detalles. Luego, desde esa página, necesito obtener todos los detalles de esa página. Necesito hacerlo de esta manera porque la URL de la página de detalles no se incrementa y cambia regularmente, pero la página de la lista de eventos permanece igual.Hermosa sopa para analizar url para obtener otros datos de urls

Básicamente:

example.com/events/ 
    <a href="http://example.com/events/1">Event 1</a> 
    <a href="http://example.com/events/2">Event 2</a> 

example.com/events/1 
    ...some detail stuff I need 

example.com/events/2 
    ...some detail stuff I need 
+0

¿Qué trataste, y por qué no funcionó? –

+0

No he intentado nada todavía. Sé cómo analizar la página de detalles, pero no cómo llegar a los datos a través de la página de la lista. – tim

+5

Sí, bueno, es un buen toque si lees los documentos y al menos haces un esfuerzo primero, IMO. –

Respuesta

56
import urllib2 
from BeautifulSoup import BeautifulSoup 

page = urllib2.urlopen('http://yahoo.com').read() 
soup = BeautifulSoup(page) 
soup.prettify() 
for anchor in soup.findAll('a', href=True): 
    print anchor['href'] 

Se le dará la lista de URL. Ahora puede iterar sobre esas urls y analizar los datos.

  • inner_div = soup.findAll("div", {"id": "y-shade"}) Este es un ejemplo. Puede ir a través de los tutoriales de BeautifulSoup.
+0

Parece que funcionará. ¿Puedes limitar los resultados a un div o ul específico? – tim

+0

yes..Puede especificar div. Para esto, puedes usar la clase. Estoy actualizando mi respuesta en un momento. – Tauquir

+0

¿Puedes elaborar lo que para anclaje en soup.findAll ('a', href = True): hace? – Ufoguy

3

Uso urllib2 para obtener la página, a continuación, utilizar hermosa sopa para obtener la lista de vínculos, también tratar scraperwiki.com

Editar:

descubrimiento reciente: Usando BeautifulSoup a través de lxml con

from lxml.html.soupparser import fromstring 

es millas mejor que solo BeautifulSoup. Te permite hacer dom.cssselect ('tu selector') que es un salvavidas. Solo asegúrate de tener instalada una buena versión de BeautifulSoup. 3.2.1 funciona como un regalo.

dom = fromstring('<html... ...') 
navigation_links = [a.get('href') for a in htm.cssselect('#navigation a')] 
4

Para el siguiente grupo de personas que vienen a través de este, BeautifulSoup se ha actualizado a la versión 4 a partir de este puesto como v3 ya no está siendo actualizado ..

$ easy_install beautifulsoup4 

$ pip install beautifulsoup4 

Para utilizar en Python ...

import bs4 as BeautifulSoup 
+1

También recomiendo usar las solicitudes de Python sobre urllib2. Sí, es un módulo no básico pero se ahorrará tanto dolor de cabeza al usarlo. Se propuso formar parte del núcleo, pero finalmente se decidió en contra. Introducción corta - https://gist.github.com/bradmontgomery/1872970 docs - http://docs.python-requests.org/en/master/ – disuse

Cuestiones relacionadas