Frage

einen HTML-Link wie

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

Wie kann ich die URL und den Text zu isolieren?

Updates

Ich bin schön Suppe verwenden, und bin nicht in der Lage, herauszufinden, wie das zu tun.

Ich habe

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

links = soup.findAll('a')

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

i get

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

Warum bin ich dabei den Inhalt?

edit: Erarbeitet auf 'stecken' wie empfohlen:)

War es hilfreich?

Lösung

Verwenden Sie Schöne Suppe . Doing it yourself ist schwieriger als es aussieht, werden Sie ein bewährtes Modul sein, besser mit.

EDIT:

Ich glaube, Sie wollen:

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

By the way, es ist eine schlechte Idee, zu versuchen, die URL dort öffnen, als wenn es schief geht es könnte hässlich werden.

EDIT 2:

Das sollten Sie alle Links in einer Seite zeigen:

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

Andere Tipps

Hier ist ein Codebeispiel zeigt die Attribute und Inhalte der Links bekommen:

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

Sieht aus wie Sie zwei Probleme haben es:

  1. link.content s , nicht link.content
  2. attrs ist ein Wörterbuch, kein String. Es hält Schlüsselwertpaaren für jedes Attribut in einem HTML-Elemente. link.attrs [ ‚href‘] erhalten Sie, was Sie zu sein scheinen suchen, aber Sie würden, dass in einem Check, falls Sie kommen über ein ein Tag ohne ein Attribut href wickeln möchten.

Auch wenn ich die anderen annehmen könnte korrekt sein, das Sie darauf hinweist Schöne Suppe zu verwenden, sie Macht nicht, und eine externe Bibliothek könnte massiv over-the-top sein für Ihre Zwecke. Hier ist ein regulärer Ausdruck, die das tun, was Sie fragen.

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

Hier ist, was es passt:

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

Wenn Sie wollten bekommen nur der Text. (ZB: „textsomething“ im zweiten Beispiel oben), würde ich einfach eine andere Regex überfahren es etwas zwischen spitzen Klammern Streifen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top