Question

Avec un lien HTML comme

<a href="urltxt" class="someclass" close="true">texttxt</a>

comment puis-je isoler l'URL et le texte?

Mises à jour

J'utilise Beautiful Soup et je suis incapable de comprendre comment faire cela.

j'ai fait

soup = BeautifulSoup.BeautifulSoup(urllib.urlopen(url))

links = soup.findAll('a')

for link in links:
    print "link content:", link.content," and attr:",link.attrs

je reçois

*link content: None  and attr: [(u'href', u'_redirectGeneric.asp?genericURL=/root    /support.asp')]*  ...
...

Pourquoi le contenu me manque-t-il?

edit: élaboré sur 'bloqué' comme conseillé:)

Était-ce utile?

La solution

Utilisez Belle soupe . Le faire vous-même est plus difficile qu'il n'y paraît, vous ferez mieux d'utiliser un module éprouvé.

EDIT:

Je pense que vous voulez:

soup = BeautifulSoup.BeautifulSoup(urllib.urlopen(url).read())

À propos, c’est une mauvaise idée d’essayer d’ouvrir l’URL ici, car si elle tournait mal, elle risquerait de devenir laide.

EDIT 2:

Ceci devrait vous montrer tous les liens d'une page:

import urlparse, urllib
from BeautifulSoup import BeautifulSoup

url = "http://www.example.com/index.html"
source = urllib.urlopen(url).read()

soup = BeautifulSoup(source)

for item in soup.fetchall('a'):
    try:
        link =  urlparse.urlparse(item['href'].lower())
    except:
        # Not a valid link
        pass
    else:
        print link

Autres conseils

Voici un exemple de code montrant comment obtenir les attributs et le contenu des liens:

soup = BeautifulSoup.BeautifulSoup(urllib.urlopen(url))
for link in soup.findAll('a'):
    print link.attrs, link.contents

On dirait que vous avez deux problèmes ici:

  1. link.content s , pas link.content
  2. attrs est un dictionnaire, pas une chaîne. Il contient des paires valeur / clé pour chaque attribut d'un élément HTML. link.attrs ['href'] vous donnera ce que vous semblez rechercher, mais vous voudrez l'envelopper dans une vérification au cas où vous rencontriez une balise sans attribut href.

Bien que je suppose que les autres puissent vous indiquer correctement l'utilisation de Beautiful Soup, ils pourraient ne pas le faire, et l'utilisation d'une bibliothèque externe pourrait s'avérer excessivement lourde. pour vos buts. Voici une regex qui fera ce que vous demandez.

/<a\s+[^>]*?href="([^"]*)".*?>(.*?)<\/a>/

Voici à quoi cela correspond:

'<a href="url" close="true">text</a>'
// Parts: "url", "text"

'<a href="url" close="true">text<span>something</span></a>'
// Parts: "url", "text<span>something</span>"

Si vous voulez obtenir juste le texte (par exemple: "textosquelquechose" dans le deuxième exemple ci-dessus), il suffit d'exécuter une autre expression régulière dessus pour le séparer de crochets pointus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top