web-dev-qa-db-fra.com

Belle soupe pour analyser l'URL pour obtenir d'autres données d'URL

J'ai besoin d'analyser une URL pour obtenir une liste d'URL qui pointent vers une page de détails. Ensuite, à partir de cette page, j'ai besoin d'obtenir tous les détails de cette page. Je dois le faire de cette façon car l'URL de la page de détails n'est pas régulièrement incrémentée et change, mais la page de la liste des événements reste la même.

Fondamentalement:

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

Il vous donnera la liste des URL. Vous pouvez maintenant parcourir ces URL et analyser les données.

  • inner_div = soup.findAll("div", {"id": "y-shade"}) Ceci est un exemple. Vous pouvez parcourir les tutoriels BeautifulSoup.
64
Tauquir

Pour le prochain groupe de personnes qui rencontrent cela, BeautifulSoup a été mis à niveau vers la v4 à partir de ce message car la v3 n'est plus mise à jour.

$ easy_install beautifulsoup4

$ pip install beautifulsoup4

Pour utiliser en Python ...

import bs4 as BeautifulSoup
5
disuse

Utilisez urllib2 pour obtenir la page, puis utilisez une belle soupe pour obtenir la liste des liens, essayez également scraperwiki.com

Éditer:

Découverte récente: utilisation de BeautifulSoup via lxml avec

from lxml.html.soupparser import fromstring

est mieux que Miles BeautifulSoup. Il vous permet de faire dom.cssselect ("votre sélecteur") qui est un épargnant de vie. Assurez-vous simplement d'avoir installé une bonne version de BeautifulSoup. 3.2.1 fonctionne un régal.

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