Zersetzen von HTML zu verknüpfen Text und Ziel
-
08-07-2019 - |
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:)
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:
- link.content s , nicht link.content
- 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