2010-12-16 12 views
19

Ho bisogno di analizzare un URL per ottenere un elenco di URL che si collegano a una pagina di dettaglio. Poi da quella pagina ho bisogno di ottenere tutti i dettagli da quella pagina. Ho bisogno di farlo in questo modo perché l'url della pagina di dettaglio non viene regolarmente incrementato e cambia, ma la pagina dell'elenco degli eventi rimane la stessa.Beautiful Soup per analizzare l'url per ottenere altri dati URL

In sostanza:

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

Cosa hai provato e perché non funziona? –

+0

Non ho ancora provato nulla. So come analizzare la pagina dei dettagli, ma non come ottenere i dati tramite la pagina di elenco. – tim

+5

Sì, beh, è ​​un bel tocco se leggi i documenti e almeno fai uno sforzo prima, IMO. –

risposta

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'] 

che vi darà l'elenco di URL. Ora è possibile scorrere su questi URL e analizzare i dati.

  • inner_div = soup.findAll("div", {"id": "y-shade"}) Questo è un esempio. Puoi seguire i tutorial di BeautifulSoup.
+0

Sembra che funzionerà. Puoi limitare i risultati a uno specifico div o ul? – tim

+0

sì..Puoi specificare div. Per questo è possibile utilizzare la classe. Sto aggiornando la mia risposta tra un po '. – Tauquir

+0

Puoi elaborare cosa per ancora in soup.findAll ('a', href = True): fa? – Ufoguy

3

Usa urllib2 per ottenere la pagina, quindi utilizzare bella zuppa per ottenere l'elenco di link, anche provare scraperwiki.com

Edit:

scoperta recente: Utilizzando BeautifulSoup attraverso lxml con

from lxml.html.soupparser import fromstring 

è miglia migliore di solo BeautifulSoup. Ti permette di fare dom.cssselect ('il tuo selettore') che è un risparmiatore di vita. Assicurati di avere una buona versione di BeautifulSoup installata. 3.2.1 funziona a meraviglia.

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

Per il prossimo gruppo di persone che vengono in questo, BeautifulSoup è stato aggiornato a V4 come di questo post come v3 non viene più aggiornato ..

$ easy_install beautifulsoup4 

$ pip install beautifulsoup4 

Per utilizzare in Python ...

import bs4 as BeautifulSoup 
+1

Ora raccomando anche di usare le richieste Python su urllib2. Sì, è un modulo non-core ma ti risparmierai così tanto mal di testa usandolo. È stato proposto di diventare parte del nucleo, ma alla fine ha deciso di non farlo. Breve introduzione - https://gist.github.com/bradmontgomery/1872970 documenti - http://docs.python-requests.org/en/master/ – disuse

Problemi correlati